轉自:http://blog.csdn.net/linuxheik/article/details/8051598 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 Makefile,如何傳遞宏定義DEBUG 1, gcc中使用宏的例子: 在程序中,通過有這樣的代碼段: #ifdef DEBUG printf("Debug is define!\n"); #endif printf("Hello World!\n"); 希望在編譯時,傳遞DEBUG定義,實現Debug版本和Release版本的區別。 gcc -DDEBUG -o ttt a.c b.c gcc -o ttt a.c b.c gcc -UDEBUG -o ttt a.c b.c 是取消宏定義 2, GNU Make make是負責從項目的源代碼中生成最終可執行文件和其他非源代碼文件的工具。 make命令本身可帶有四種參數:標志、宏定義、描述文件名和目標文件名。 其標准形式為:make [flags] [macro definitions] [targets] Unix系統下標志位flags選項及其含義為: -f file 指定file文件為描述文件,如果file參數為 '-' 符,那么描述文件指向標准輸入。如果沒有 '-f' 參數,則系統將默認當前目錄下名為makefile或者名為Makefile的文件為描述文件。在Linux中, GNU make 工具在當前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索 makefile文件。 -i 忽略命令執行返回的出錯信息。 -s 沉默模式,在執行之前不輸出相應的命令行信息。 -r 禁止使用隱含規則。 -n 非執行模式,輸出所有執行命令,但並不執行。 -t 更新目標文件。 -q make操作將根據目標文件是否已經更新返回"0"或非"0"的狀態信息。 -p 輸出所有宏定義和目標文件描述。 -d Debug模式,輸出有關文件和檢測時間的詳細信息。 Linux下make標志位的常用選項與Unix系統中稍有不同,下面只列出了不同部分: -c dir 在讀取 makefile 之前改變到指定的目錄dir。 -I dir 當包含其他 makefile文件時,利用該選項指定搜索目錄。 -h help文擋,顯示所有的make選項。 -w 在處理 makefile 之前和之后,都顯示工作目錄。 通過命令行參數中的target ,可指定make要編譯的目標,並且允許同時定義編譯多個目標,操作時按照從左向右的順序依次編譯target選項中指定的目標文件。如果命令行中沒有指定目標,則系統默認target指向描述文件中第一個目標文件。 2.1 make macro definitions makefile如下: LIBES= -LS # use macros rewrite makefile .. prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o prog 此時假如執行不帶參數的make命令,將連接三個目標文檔和庫文檔LS;但是假如在make命令后帶有新的宏定義: make "LIBES= -LL -LS" 則命令行后面的宏定義將覆蓋makefile文檔中的宏定義。若LL也是庫文檔,此時make命令將連接三個目標文檔連同兩個庫文檔LS和LL。 make local_all "SW=SWM_DEBUG" 2.2 追加宏定義 c file: #ifdef SWM_DEBUG Tracker->Debug( "%s:%d:%s, none do iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxiiiiiiiiiiiiiiiiiiiiiii\n",__FILE__, __LINE__,__FUNCTION__ ); #endif Makefile file: CPPFLAGS += -DDEBUG_MEMORY CPPFLAGS += -DDEBUG_CLASS_NAMES make 命令: make local_all "CPPFLAGS += -DSWM_DEBUG" #Linux