5. 常用的make命令行選項

-n選項只打印要執行的命令,而不會真的執行命令,這個選項有助於我們檢查Makefile寫得是否正確,由於Makefile不是順序執行的,用這個選項可以先看看命令的執行順序,確認無誤了再真正執行命令。

-C選項可以切換到另一個目錄執行那個目錄下的Makefile,比如先退到上一級目錄再執行我們的Makefile(假設我們的原始碼都放在testmake目錄下):

$ cd ..
$ make -C testmake
make: Entering directory `/home/akaedu/testmake'
cc    -c -o main.o main.c
cc    -c -o stack.o stack.c
cc    -c -o maze.o maze.c
gcc main.o stack.o maze.o -o main
make: Leaving directory `/home/akaedu/testmake'

一些規模較大的項目會把不同的模組或子系統的原始碼放在不同的子目錄中,然後在每個子目錄下都寫一個該目錄的Makefile,然後在一個總的Makefile中用make -C命令執行每個子目錄下的Makefile。例如Linux內核原始碼根目錄下有Makefile,子目錄fsnet等也有各自的Makefile,二級子目錄fs/ramfsnet/ipv4等也有各自的Makefile

make命令行也可以用=:=定義變數,如果這次編譯我想加調試選項-g,但我不想每次編譯都加-g選項,可以在命令行定義CFLAGS變數,而不必修改Makefile編譯完了再改回來:

$ make CFLAGS=-g
cc -g   -c -o main.o main.c
cc -g   -c -o stack.o stack.c
cc -g   -c -o maze.o maze.c
gcc main.o stack.o maze.o -o main

如果在Makefile中也定義了CFLAGS變數,則命令行的值覆蓋Makefile中的值。