浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS
1. include文件包含
當(dāng) make 讀取到 include 關(guān)鍵字的時候,會暫停讀取當(dāng)前的 Makefile,而是去讀 include 包含的文件,讀取結(jié)束后再繼讀取當(dāng)前的 Makefile 文件。
include 使用的具體方式如下:
include <filenames>
filenames 是 shell 支持的文件名(可以使用通配符表示的文件)。
注意:
include關(guān)鍵字所在的行首可以包含一個或者是多個的空格(讀取的時候空格會被自動的忽略),但是不能使用Tab開始,否則會把include當(dāng)作式命令來處理。
包含的多個文件之間要使用空格分隔開。使用include包含進來的Makefile文件中,如果存在函數(shù)或者是變量的引用,它們會在包含的Makefile中展開。
include 通常使用在以下的場合:
- 在一個工程文件中,每一個模塊都有一個獨立的
Makefile來描述它的重建規(guī)則。它們需要定義一組通用的變量定義或者是模式規(guī)則。通用的做法是將這些共同使用的變量或者模式規(guī)則定義在一個文件中,需要的時候用include包含這個文件。 - 當(dāng)根據(jù)源文件自動產(chǎn)生依賴文件時,我們可以將自動產(chǎn)生的依賴關(guān)系保存在另一個文件中。然后在
Makefile中包含這個文件。
注意:如果使用
include包含文件的時候,指定的文件不是文件的絕對路徑或者是為當(dāng)前文件下沒有這個文件,make會根據(jù)文件名會在以下幾個路徑中去找,
- 首先我們在執(zhí)行
make命令的時候可以加入選項-I或--include-dir后面添加上指定的路徑,如果文件存在就會被使用; - 如果文件不存在將會在其他的幾個路徑中搜索:
usr/local/include和usr/include;
如果在上面的路徑?jīng)]有找到 include 指定的文件,make 將會提示一個文件沒有找到的警示提示,但是不會退出,而是繼續(xù)執(zhí)行 Makefile 的后續(xù)的內(nèi)容。
當(dāng)完成讀取整個 Makefile 后,make 將試圖使用規(guī)則來創(chuàng)建通過 include 指定但不存在的文件。當(dāng)不能創(chuàng)建的時候,文件將會保存退出。
使用時,通常用 -include 來代替 include 來忽略文件不存在或者是無法創(chuàng)建的錯誤提示,使用格式如下:
-include <filename>
使用方法和 include 的使用方法相同。
這兩種方式之間的區(qū)別:
include <filenames>,make在處理程序的時候,文件列表中的任意一個文件不存在的時候或者是沒有規(guī)則去創(chuàng)建這個文件的時候,make程序?qū)崾惧e誤并保存退出;-include <filenames>,當(dāng)包含的文件不存在或者是沒有規(guī)則去創(chuàng)建它的時候,make將會繼續(xù)執(zhí)行程序,只有真正由于不能完成終極目標(biāo)重建的時候我們的程序才會提示錯誤保存退出;
2. 使用示例
目錄結(jié)構(gòu)如下:
wohu@ubuntu:~/cpp/func$ ls
common_variable demo.cpp demo.h Makefile
common_variable 內(nèi)容如下:
a = 11
b = 22
c = 33
Makefile 內(nèi)容如下:
include common_variable
all:echo $(a) $(b) $(c)
執(zhí)行 make 之后
wohu@ubuntu:~/cpp/func$ make
echo 11 22 33
11 22 33
wohu@ubuntu:~/cpp/func$
3. MAKECMDGOALS
make 在執(zhí)行時會設(shè)置一個特殊變量 – MAKECMDGOALS ,該變量記錄了命令行參數(shù)指定的終極目標(biāo)列表,沒有通過參數(shù)指定終極目標(biāo)時此變量為空。
ifeq ($(MAKECMDGOALS), aa cc)
obj = aa cc
else ifeq ($(MAKECMDGOALS), bb)
obj = bb
else
obj = other
endifaa:@echo $(obj)
bb:@echo $(obj)
cc:@echo $(obj)
other:@echo $(obj)
執(zhí)行 make 結(jié)果
wohu@ubuntu:~/cpp/func$ make aa cc
aa cc
aa cc
wohu@ubuntu:~/cpp/func$ make aa
other
wohu@ubuntu:~/cpp/func$ make bb
bb
wohu@ubuntu:~/cpp/func$ make cc
other
wohu@ubuntu:~/cpp/func$
總結(jié)
以上是生活随笔為你收集整理的浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国封装用胶膜行业运
- 下一篇: 浅显易懂 Makefile 入门 (10