日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用

發布時間:2023/11/28 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 嵌套執行 make

在一個大的工程文件中,不同的文件按照功能被劃分到不同的模塊中,每個模塊可能都會有自己的編譯順序和規則,如果在一個 Makefile 文件中描述所有模塊的編譯規則,就會很亂,執行時也會不方便,所以就需要在不同的模塊中分別對它們的規則進行描述,也就是每一個模塊都編寫一個 Makefile 文件,這樣不僅方便管理,而且可以迅速發現模塊中的問題。這樣我們只需要控制其他模塊中的 Makefile 就可以實現總體的控制,這就是 make 的嵌套執行。

如何來使用呢?舉例說明如下:

subsystem:cd subdir && $(MAKE)

這個例子可以這樣來理解,在當前目錄下有一個目錄文件 subdir 和一個 Makefile 文件,子目錄 subdir 文件下還有一個 Makefile 文件,這個文件是用來描述這個子目錄文件的編譯規則。

使用時只需要在最外層的目錄中執行 make 命令,當命令執行到上述的規則時,程序會進入到子目錄中執行 make。這就是嵌套執行 make,我們把最外層的 Makefile 稱為是總控 Makefile

上述的規則也可以換成另外一種寫法:

subsystem$(MAKE) -C subdir

make 的嵌套執行中,我們需要了解一個變量 CURDIR,此變量代表 make 的工作目錄。當使用 make 的選項 -C 的時候,命令就會進入指定的目錄中,然后此變量就會被重新賦值。

總之,如果在 Makefile 中沒有對此變量進行顯式的賦值操作,那么它就表示 make 的工作目錄。我們也可以在 Makefile 中為這個變量賦一個新的值,當然重新賦值后這個變量將不再代表 make 的工作目錄。

2. export 的使用

使用 make 嵌套執行的時候,變量是否傳遞也是我們需要注意的。如果需要變量的傳遞,那么可以這樣來使用:

export <variable>

如果不需要那么可以這樣來寫:

unexport <variable>

<variable> 是變量的名字,不需要使用 $ 這個字符。如果所有的變量都需要傳遞,那么只需要使用 export 就可以,不需要添加變量的名字。

export VALUE1 := export.c    <-- 用了 export, 此變量能夠傳遞到 ./other/Makefile 中
...
@cd ./other && make
...

export 語法格式如下:

export variable = value
export variable := value
export variable += value

Makefile 中還有兩個變量不管是不是使用關鍵字 export 聲明,它們總會傳遞到下層的 Makefile 中。這兩個變量分別是 SHELLMAKEFLAGS,特別是 MAKEFLAGS 變量,包含了 make 的參數信息。

如果執行總控 Makefile 時,make 命令帶有參數或者在上層的 Makefile 中定義了這個變量,那么 MAKEFLAGS 變量的值將會是 make 命令傳遞的參數,并且會傳遞到下層的 Makefile 中,這是一個系統級別的環境變量。

make 命令中有幾個參數選項并不傳遞,它們是:-C-f-o-h-W。如果我們不想傳遞 MAKEFLAGS 變量的值,在 Makefile 中可以這樣來寫:

subsystem:cd subdir && $(MAKE) MAKEFLAGS=

3. 嵌套執行示例

目錄結構如下:

wohu@ubuntu:~/cpp/func$ tree
.
├── demo.cpp
├── demo.h
├── Makefile
└── subdir└── Makefile1 directory, 4 files
wohu@ubuntu:~/cpp/func$ 

當前目錄下的 Makefile 內容:

export GLOBAL_VAR = 123
SUBDIR = ./subdir all:echo "this is main Makefile"echo $(GLOBAL_VAR)cd $(SUBDIR) && $(MAKE)

subdir 目錄下的 Makefile 內容:

all:echo "this is subdir Makefile"echo "display GLOBAL_VAR" $(GLOBAL_VAR)

在當前目錄下執行 make 輸出結果

wohu@ubuntu:~/cpp/func$ make
echo "this is main Makefile"
this is main Makefile
echo 123
123
cd ./subdir  && make
make[1]: Entering directory '/home/wohu/cpp/func/subdir'
echo "this is subdir Makefile"
this is subdir Makefile
echo "display GLOBAL_VAR" 123
display GLOBAL_VAR 123
make[1]: Leaving directory '/home/wohu/cpp/func/subdir'
wohu@ubuntu:~/cpp/func$ 

總結

以上是生活随笔為你收集整理的浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。