make *** 没有指明目标并且找不到 makefile。 停止。_Makefile目标文件搜索(VPATH和vpath)...
我們都知道一個(gè)工程文件中的源文件有很多,并且存放的位置可能不相同(工程中的文件會(huì)被放到不同的目錄下),所以按照之前的方式去編寫 Makefile 會(huì)有問(wèn)題。我們之前列舉的例子,所有的源文件基本上都是存放在與 Makefile 相同的目錄下。只要依賴的文件存在,并且依賴規(guī)則沒(méi)有問(wèn)題,執(zhí)行 make命令整個(gè)工程就會(huì)按照對(duì)我們編寫規(guī)則去編譯,最終會(huì)重建目標(biāo)文件。那如果需要的文件是存在于不同的路徑下,在編譯的時(shí)候要去怎么辦呢(不改變工程的結(jié)構(gòu))?這就用到了 Makefile 中為我們提供的目錄搜索文件的功能。常見(jiàn)的搜索的方法的主要有兩種:一般搜索VPATH和選擇搜索vpath。乍一看只是大小寫的區(qū)別,其實(shí)兩者在本質(zhì)上也是不同的。VPATH 和 vpath 的區(qū)別:VPATH 是變量,更具體的說(shuō)是環(huán)境變量,Makefile 中的一種特殊變量,使用時(shí)需要指定文件的路徑;vpath 是關(guān)鍵字,按照模式搜索,也可以說(shuō)成是選擇搜索。搜索的時(shí)候不僅需要加上文件的路徑,還需要加上相應(yīng)限制的條件。
?VPATH的使用
在 Makefile 中可以這樣寫:
VPATH := src
我們可以這樣理解,把 src 的值賦值給變量 VPATH,所以在執(zhí)行 make 的時(shí)候會(huì)從 src 目錄下找我們需要的文件。當(dāng)存在多個(gè)路徑的時(shí)候我們可以這樣寫:
VPATH := src car
或者是
VPATH := src:car
多個(gè)路徑之間要使用空格或者是冒號(hào)隔開(kāi),表示在多個(gè)路徑下搜索文件。搜索的順序?yàn)槲覀儠?shū)寫時(shí)的順序,拿上面的例子來(lái)說(shuō),我們應(yīng)該先搜索 src 目錄下的文件,再搜索 car 目錄下的文件。
注意:無(wú)論你定義了多少路徑,make 執(zhí)行的時(shí)候會(huì)先搜索當(dāng)前路徑下的文件,當(dāng)前目錄下沒(méi)有我們要找的文件,才去 VPATH 的路徑中去尋找。如果當(dāng)前目錄下有我們要使用的文件,那么 make 就會(huì)使用我們當(dāng)前目錄下的文件。
實(shí)例:
VPATH=src car
test:test.o
gcc -o $@ $^
假設(shè) test.c 文件沒(méi)有在當(dāng)前的目錄而在當(dāng)前文件的子目錄 "src" 或者是 "car" 下,程序執(zhí)行是沒(méi)有問(wèn)題的,但是生成的 test 的文件沒(méi)有在定義的子目錄文件中而是在當(dāng)前的目錄下,當(dāng)然生成文件路徑可以指定。
vpath的使用
學(xué)習(xí)了 VPATH的使用,我們?cè)賮?lái)了解一下關(guān)鍵字搜索 vpath 的使用,這種搜索方式一般被稱作選擇性搜索。使用上的區(qū)別我們可以這樣理解:VPATH 是搜索路徑下所有的文件,而 vpath 更像是添加了限制條件,會(huì)過(guò)濾出一部分再去尋找。?具體用法:
1) vpath PATTERN DIRECTORIES?
2) vpath PATTERN
3) vpath
( PATTERN:可以理解為要尋找的條件,DIRECTORIES:尋找的路徑 )首先是用法一,命令格式如下:
vpath test.c src
可以這樣理解,在 src 路徑下搜索文件 test.c。多路徑的書(shū)寫規(guī)則如下:
vpath test.c src car? ? ? ? ?或者是? ? ? ? ?vpath test.c src : car
多路徑的用法其實(shí)和 VPATH 差不多,都是使用空格或者是冒號(hào)分隔開(kāi),搜索路徑的順序是先 src 目錄,然后是 car 目錄。其次是用法二,命令格式如下:
vpath test.c
用法二的意思是清除符合文件 test.c 的搜索目錄。最后是用法三,命令格式如下:
vpath
vpath 單獨(dú)使的意思是清除所有已被設(shè)置的文件搜索路徑。另外在使用 vpath 的時(shí)候,搜索的條件中可以包含模式字符“%”,這個(gè)符號(hào)的作用是匹配一個(gè)或者是多個(gè)字符,例如“%.c”表示搜索路徑下所有的 .c 結(jié)尾的文件。如果搜索條件中沒(méi)有包含“%" ,那么搜索的文件就是具體的文件名稱。?使用什么樣的搜索方法,主要是基于編譯器的執(zhí)行效率。使用 VPATH 的情況是前路徑下的文件較少,或者是搜索的文件不能使用通配符表示,這些情況下使用VPATH最好。如果存在某個(gè)路徑的文件特別的多或者是可以使用通配符表示的時(shí)候,就不建議使用 VPATH 這種方法,為什么呢?因?yàn)?VPATH 在去搜索文件的時(shí)沒(méi)有限制條件,所以它回去檢索這個(gè)目錄下的所有文件,每一個(gè)文件都會(huì)進(jìn)行對(duì)比,搜索和我們目錄名相同的文件,不僅速度會(huì)很慢,而且效率會(huì)很低。我們?cè)谶@種情況下就可以使用 vpath 搜索,它包含搜索條件的限制,搜索的時(shí)候只會(huì)從我們規(guī)定的條件中搜索目標(biāo),過(guò)濾掉不符合條件的文件,當(dāng)然查找的時(shí)候也會(huì)比較的快。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的make *** 没有指明目标并且找不到 makefile。 停止。_Makefile目标文件搜索(VPATH和vpath)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQLite中的高级SQL
- 下一篇: linux 64 32 编译支持,在64