成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

重新發現make: 規則背后的力量

系統 Linux
我過去認為 makefile 只是一種將一組組的 shell 命令列出來的簡便方法;過了一段時間我了解到它們是有多么的強大、靈活以及功能齊全。這篇文章帶你領略其中一些有關規則的特性。

[[261493]]

我過去認為 makefile 只是一種將一組組的 shell 命令列出來的簡便方法;過了一段時間我了解到它們是有多么的強大、靈活以及功能齊全。這篇文章帶你領略其中一些有關規則的特性。

備注:這些全是針對 GNU Makefile 的,如果你希望支持 BSD Makefile ,你會發現有些新的功能缺失。感謝 zge 指出這點。

規則

規則rule是指示 make 應該如何并且何時構建一個被稱作為目標target的文件的指令。目標可以依賴于其它被稱作為前提prerequisite的文件。

你會指示 make 如何按步驟recipe構建目標,那就是一套按照出現順序一次執行一個的 shell 命令。語法像這樣:

  1. target_name : prerequisites
  2. recipe

一但你定義好了規則,你就可以通過從命令行執行以下命令構建目標:

  1. $ make target_name

目標一經構建,除非前提改變,否則 make 會足夠聰明地不再去運行該步驟。

關于前提的更多信息

前提表明了兩件事情:

  • 當目標應當被構建時:如果其中一個前提比目標更新,make 假定目的應當被構建。
  • 執行的順序:鑒于前提可以反過來在 makefile 中由另一套規則所構建,它們同樣暗示了一個執行規則的順序。

如果你想要定義一個順序但是你不想在前提改變的時候重新構建目標,你可以使用一種特別的叫做“唯順序order only”的前提。這種前提可以被放在普通的前提之后,用管道符(|)進行分隔。

樣式

為了便利,make 接受目標和前提的樣式。通過包含 % 符號可以定義一種樣式。這個符號是一個可以匹配任何長度的文字符號或者空隔的通配符。以下有一些示例:

  • %:匹配任何文件
  • %.md:匹配所有 .md 結尾的文件
  • prefix%.go:匹配所有以 prefix 開頭以 .go 結尾的文件

特殊目標

有一系列目標名字,它們對于 make 來說有特殊的意義,被稱作特殊目標special target

你可以在這個文檔發現全套特殊目標。作為一種經驗法則,特殊目標以點開始后面跟著大寫字母。

以下是幾個有用的特殊目標:

  • .PHONY:向 make 表明此目標的前提可以被當成偽目標。這意味著 make 將總是運行,無論有那個名字的文件是否存在或者上次被修改的時間是什么。
  • .DEFAULT:被用于任何沒有指定規則的目標。
  • .IGNORE:如果你指定 .IGNORE 為前提,make 將忽略執行步驟中的錯誤。

替代

當你需要以你指定的改動方式改變一個變量的值,替代substitution就十分有用了。

替代的格式是 $(var:a=b),它的意思是獲取變量 var 的值,用值里面的 b 替代詞末尾的每個 a 以代替最終的字符串。例如:

  1. foo := a.o
  2. bar : = $(foo:.o=.c) # sets bar to a.c

注意:特別感謝 Luis Lavena 讓我們知道替代的存在。

檔案文件

檔案文件是用來一起將多個數據文檔(類似于壓縮文件的概念)收集成一個文件。它們由 ar Unix 工具所構建。ar 可以用于為任何目的創建檔案,但除了靜態庫,它已經被 tar 大量替代。

make 中,你可以使用一個檔案文件中的單獨一個成員作為目標或者前提,就像這樣:

  1. archive(member) : prerequisite
  2. recipe

***的想法

關于 make 還有更多可探索的,但是至少這是一個起點,我強烈鼓勵你去查看文檔,創建一個笨拙的 makefile 然后就可以探索它了。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-10-15 10:11:00

遠程管理監控數據中心

2016-10-09 13:19:43

2016-07-06 11:38:10

移動 出海

2012-06-20 09:39:02

惡意網站

2013-02-28 10:24:18

2022-08-16 08:35:45

Black Hat網絡安全

2021-01-15 07:22:51

APP時間規劃局證件照相機

2021-03-03 11:13:30

APP手機打車軟件

2009-05-05 11:06:19

存儲技術藍寶石高數據存儲

2010-03-26 17:50:17

Python設計理念

2013-03-05 09:04:38

Java 60day

2021-06-06 16:19:46

微軟Windows 10Windows

2023-02-21 21:50:07

2021-10-18 13:10:41

勒索軟件攻擊信息安全

2020-05-08 10:12:25

腦機接口機器翻譯人工智能

2014-09-25 09:59:00

2019-03-25 22:04:19

編程PythonJava

2021-07-01 14:52:17

Windows 11操作系統微軟

2013-08-14 11:14:20

開源Google
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本欧美国产在线观看 | 18成人在线观看 | 精品日韩欧美一区二区 | 国产亚洲成av人在线观看导航 | 欧美日韩国产精品 | 欧美成人精品一区二区男人看 | 99亚洲精品 | 久久久网| 日本久久久影视 | 日韩在线观看精品 | 国产成人a亚洲精品 | 国产成人jvid在线播放 | 日本亚洲一区 | 一区二区高清在线观看 | 中文区中文字幕免费看 | 男女精品网站 | 久久久久久国产免费视网址 | 精国产品一区二区三区 | 国产999精品久久久影片官网 | 久久99精品国产99久久6男男 | 91在线看视频 | 日韩中文字幕在线视频观看 | 亚洲精品一区二区三区 | 91日b| 久久com| 在线免费观看视频黄 | 三级在线观看 | 午夜精品福利视频 | 国产视频第一页 | 免费国产精品久久久久久 | 国产精品一二区 | 午夜免费电影 | 麻豆一区二区三区精品视频 | 国产精品高清一区二区 | 91精品久久久久久久久中文字幕 | 亚洲精品久久久一区二区三区 | 蜜桃精品在线 | 欧美日韩在线免费观看 | 新超碰97 | 亚洲精品免费视频 | 亚洲三级免费看 |