轉自: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