在編譯系統的時候,我們一般只要簡單的輸入make執行就可以了。但有時候,我們還是需要讓make命令帶入一些參數給makefile腳本。
比如,你在代碼裡面需要定義一個宏DEBUG來打開調試開關,代碼如下:
int main() { int i=9; #ifdef DEBUG i=1; #else i=0; #endif printf("i=%d\n", i); return 0; }
一般來說,這個宏定義可以通過直接修改源代碼進行,但這樣顯然不是很好的辦法。另外一個辦法是通過makefile修改,比如:
CFLAGS=-g -Wall -DDEBUG object=myprog all:$object myprog:a.c gcc ${CFLAGS} a.c -o ${object}
如果更進一步,連makefile都不想修改,我們可以通過向make命令傳遞參數來進行,為此,我們需要適當的修改makefile如下:
CFLAGS=CFLAG CFLAGS+=-g -Wall -DDEBUG object=myprog all:$object myprog:a.c gcc ${CFLAGS} a.c -o ${object}
此時,如果想打開DEBUG宏,我們可以這樣輸入make命令:
[ychq@ICM3-2 net]$ make CFLAG=-DDEBUG gcc -g -Wall -DDEBUG a.c a.c: In function `main': a.c:9: warning: implicit declaration of function `printf' [ychq@ICM3-2 net]$
我們可以發現,DEBUG宏已經被正確的傳入。
更進一步的,我們可以通過傳遞不同的參數給make,讓make編譯不同的模塊。