自動切換,我們需要使用gcc以這種方式來編譯C源代碼:編譯-ansi -pedantic -Wall用gcc
gcc -ansi -pedantic -Wall program.c
我不知道我怎麼能「自動」這個,所以當我輸入:
gcc program.c
它會自動編譯3個開關。這可能嗎?
自動切換,我們需要使用gcc以這種方式來編譯C源代碼:編譯-ansi -pedantic -Wall用gcc
gcc -ansi -pedantic -Wall program.c
我不知道我怎麼能「自動」這個,所以當我輸入:
gcc program.c
它會自動編譯3個開關。這可能嗎?
要自動構建任意數量的構建步驟/複雜參數,應該使用makefile。
一旦你有一個makefile,你只需要輸入:make
makefile將是傳統的方式,特別是作爲更大構建過程的一部分。
如果您經常想要在沒有makefile的情況下編譯,您可以在您的.bashrc
或同等文件中定義一個別名:alias gcc=gcc -ansi -pedantic -Wall
。
您也可以使用make的隱式規則,以便您不必爲每個程序編寫makefile。如果您說make foo
並且當前目錄中存在foo.c
文件,Make會自動調用編譯器。爲此添加標誌可在您的環境中定義變量CFLAGS
,例如在bash中添加export CFLAGS="-Wall -pedantic -ansi"
至.bashrc
。
如果您的程序依賴於多個文件,但是您必須創建一個makefile,但對於C編譯,只要其中一個具有與目標相同的基本名稱,就可以使用列出的依賴關係。
例如,對於這個Makefile:
# Makefile
foo:foo.o bar.o
運行make
將執行命令
gcc $CFLAGS -c -o foo.o foo.c
gcc $CFLAGS -c -o bar.o bar.c
gcc -o foo foo.o bar.o
,您無需添加任何規則。
您可以使用一個shell腳本,該腳本根據其被調用的方式獲取一些提示,並在爲偶爾的一次性構建設置CFLAGS
後適當調用make
。
假設你有/usr/bin/compile
,這是一個shell腳本,它查看$0
以查看實際調用的名稱。然後,您使用符號連接到它命名爲pedantic
,fullwarn
等
在shell腳本本身,是這樣的:
OLDCFLAGS=$CFLAGS
WHATAMI=$(basename $0)
case "$WHATAMI" in
pedantic)
export CFLAGS="-Wall -pedantic -ansi"
make [email protected]
exit $?
;;
c99)
export CFLAGS="-std=c99 ... ... ..."
....
然後,編譯foo中。c。與額外naggy標誌:
pedantic foo
這是很方便的,正如我所說的一次性版本,例如試圖編譯代碼,有人張貼在一個問題,或制定出如何使用新的庫等
爲別的,只使用一個makefile,正如其他人說。
Downvoted的提議硬編碼(和碎)的Makefile時用'出口CFLAGS = ...'環境不正是傑夫泰想要潛規則。 (見斯科特威爾斯的答案)。 – 2010-05-22 04:34:24
@馬特B:生成文件的目的是簡單地介紹,同時給予最簡單的例子可能會通過鍵入使工作makefile文件的概念。不使用隱式規則。我雖然刪除了這個例子。如果不是很快,OP很可能會想要對他的makefile做更復雜的事情。 – 2010-05-22 14:43:46