Make 是甚麼以及它的用法

Make 是甚麼 ?

顧名思義,make 的意思就是做。譬如說,想做出一個文件 a.txt,那麼就可以執行下面的指令:

$ make a.txt

但是如果你直接在命令行輸入這個指令是不會起作用的,因為 make 本身不知道要怎麼做出 a.txt,需要其他人告訴 make 怎麼做,也就是下面會介紹到的 Makefile。

比如說,假設 a.txt 要由 b.txt 和 c.txt 合併來得到,實際上指令應該要像這樣:

a.txt: b.txt c.txt
    cat b.txt c.txt > a.txt

我們來解析下上面的指令。其實 make a.txt 本身可以分為兩步。第一步(第一行),要先確認 b.txt 和 c.txt 存在。第二步(第二行),使用 cat 連接指令合併 b.txt 和 c.txt 並且輸出到 a.txt。

其實這就是本文的主角,Makefile。像上面告訴 make 指令要怎麼做的規則都寫在一個叫做 Makefile 的文件中。而我們可以指定當前的 make 指令要依照哪一個 Makefile 文件的規定去 make 東西,像下面這樣:

$ make -f rules.txt
// 或是
$ make --file=rules.txt

上面的代碼就是說,指定 make 依照 rules.txt 中的規則去做東西。

這邊先簡單總結下,其實 make 就是一個根據 Makefile 規則指示構建東西的工具,Makefile 中的規則也很簡單,說明要做的東西依賴甚麼東西,要怎麼做。

Makefile 怎麼寫 ?

文件格式

Makefile 文件其實就是一些規則的集合,而每條規則型式如下:

<target> : <prerequisites>
[tab] <command>

target 放的叫做"目標",prerequisites 放的叫做前置條件,第二行必須由一個 tab 開頭,這是規定,然後後面就跟著 command,也就是要執行的指令。

其中,除了 target 為必需的,其他都是可選的,而 prerequisites 和 command 則必須至少存在一個。

target

一個目標就構成一個規則。通常,目標可以是文件名,像是上面的 a.txt。除了文件名,還可以是某個操作的名字,這叫做偽目標 (phony target)。看看下面的例子:

clean:
    rm *.o temp

像上面這樣,clean 就是一個偽目標,作用是刪除所有後綴為 .o 的文件。

$ make clean

但是,萬一我們的目錄下面已經有了一個叫 clean 的文件,那 make 就會認為已經存在 clean 這個目標,所以並不會去執行真正的 clean 規則,當然這不是我們所希望的。解決辦法就是可以顯示的聲明 clean 是一個偽目標,相當於告訴 make,當我執行 make cle

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值