gcc中的 D選項

2021-10-10 12:44:08 字數 895 閱讀 3218

有時候我們想在 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 只啟用預處理,編譯,和彙編,也...