有時候我們想在 c 原始檔中使用 makefile 中定義的某些變數,根據變數的取值做出不同的處理,比如 debug 開關、版本資訊等,這時候我們可以通過 gcc 的 -d 選項來滿足這一需求,它等同於在 c 檔案中通過 #define 語句定義乙個巨集。比如,我們可以在 makefile 中定義以下變數,並通過 gcc -d 選項傳給原始檔,然後在原始檔中使用這些變數。
makefile:
cc=gcc
version=0.0.2
release_number=2
all: test
test: test.c
$(cc) -o $@ $^ -ddebug_print -d version='"$(version)"' -d release_number=$(release_number)
.phony: clean
clean:
rm test
test.c:
#include int main(int argc, char **ar**)
return 0;
}
執行結果:
$ make
gcc -o test test.c -ddebug_print -d version='"0.0.2"' -d release_number=2
$ ./test
./test (version: 0.0.2, release number: 2)
$
需要注意的是,變數的傳遞是在編譯時完成的,而不是鏈結時和執行時,因此需要在編譯 .c 檔案時傳遞變數。
同時,如果傳遞的內容是字串,則需要在字串的字面值兩邊加上單引號。
GCC中 I L l 選項的作用
在makefile中經常會看到這些選項,gcc缺省會在程式當前目錄 path路徑中查詢所需要的材料 如何給gcc新增我們自己的原材料 標頭檔案,庫等 imyinclude lb la整體舉例 cc g cflags g bin main objs main.o libs i usr include ...
gcc選項的總結
e 對原始檔進行預處理,生成.i檔案 s 生成組合語言檔案 s檔案 c 生成.obj檔案 o file 生成可執行檔案 和上面幾個選項配合使用時,用於生成指定檔名的中間檔案 ansi 關閉gnu c中與ansi c不相容的特性,啟用ansi c的專有特性 idir 指定dir為標頭檔案的搜尋目錄 l...
GCC編譯選項
gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器ld 引數詳解 c 只啟用預處理,編譯,和彙編,也...