2010-05-22 87 views
3

自動切換,我們需要使用gcc以這種方式來編譯C源代碼:編譯-ansi -pedantic -Wall用gcc

gcc -ansi -pedantic -Wall program.c 

我不知道我怎麼能「自動」這個,所以當我輸入:

gcc program.c 

它會自動編譯3個開關。這可能嗎?

回答

8

要自動構建任意數量的構建步驟/複雜參數,應該使用makefile

一旦你有一個makefile,你只需要輸入:make

+2

Downvoted的提議硬編碼(和碎)的Makefile時用'出口CFLAGS = ...'環境不正是傑夫泰想要潛規則。 (見斯科特威爾斯的答案)。 – 2010-05-22 04:34:24

+0

@馬特B:生成文件的目的是簡單地介紹,同時給予最簡單的例子可能會通過鍵入使工作makefile文件的概念。不使用隱式規則。我雖然刪除了這個例子。如果不是很快,OP很可能會想要對他的makefile做更復雜的事情。 – 2010-05-22 14:43:46

3
alias gcc="gcc -ansi -pedantic -Wall" 

但正如@布賴恩說,你真的應該使用一個makefile,或更好,構建系統,如CMakeSCons

+3

我只能說這東西,除了'gcc'所以,如果我曾經想在非瘋狂naggy模式中使用它,我仍然可以調用'gcc'。 – nategoose 2010-05-22 02:52:23

+0

@nategoose:如果你想打電話給「普通」 GCC而不調用別名,你會放一個反斜槓在命令\ GCC的前面,以防止別名替換。 – dadinck 2013-03-08 21:18:16

2

makefile將是傳統的方式,特別是作爲更大構建過程的一部分。

如果您經常想要在沒有makefile的情況下編譯,您可以在您的.bashrc或同等文件中定義一個別名:alias gcc=gcc -ansi -pedantic -Wall

9

您也可以使用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 

,您無需添加任何規則。

2

您可以使用一個shell腳本,該腳本根據其被調用的方式獲取一些提示,並在爲偶爾的一次性構建設置CFLAGS後適當調用make

假設你有/usr/bin/compile,這是一個shell腳本,它查看$0以查看實際調用的名稱。然後,您使用符號連接到它命名爲pedanticfullwarn

在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,正如其他人說。