2016-02-28 47 views
1

我認爲這會很好,如果默認打開-Wall標誌也不會太壞。我如何配置GCC?如何配置GCC默認顯示所有警告?

這是否有任何缺點,除了當你從源代碼編譯一些大型程序時,大量的警告會使你的終端氾濫?

+0

爲什麼不把它放在makefile中? –

+1

我不確定您是否可以使用-Wall始終開啓配置GCC,但您可以創建一個簡單的包裝腳本,它總是通過-Wall調用實際的gcc並轉發其他參數。 – juzzlin

+0

@ IgnacioVazquez-Abrams因爲我是一名學生,只使用makefile編譯單個文件程序。 – daltonfury42

回答

0

juzzlin提出一個好方法是爲gcc編寫一個封裝器。 Marc Glisse還建議寫一個是實現我想要的最好方法。這就是我所做的。

我做了一個bash腳本,我呼籲GCC:

#!/bin/sh 

echo -n "Compiling $1..." 



gcc -Wall -Werror -o $(basename $1 .c).out $1 

a=$? 

if [[ "$a" -eq 1 ]]; then 
    echo "Failed!" 

else 
    echo "Done." 
    echo "Executing:" 
    ./$(basename $1 .c).out 
fi 

然後我複製腳本/usr/bin並使其可執行:

sudo cp car /usr/bin 
chmod +x /usr/bin/car 

(腳本的名稱是car這代表「編譯並運行」) 所以,無論何時我想編譯源文件並運行它,我都會輸入:

car mysourcefile.c 
+0

我正在考慮簡單的'#!/ bin/sh exec gcc -Wall「$ @」'(改變行在'exec'之前),但這就是腳本的美妙之處,如果你喜歡它的寫法,那就是它的樣子。 –

0

正如評論中所討論的那樣(儘管它不是對你的問題的直接回答),使用Makefile有很多好處。它提供了一個放置構建命令的地方,如果只使用make構建,它將始終保持最新狀態。它還可以減輕每次構建時的運行測試。

Writing tests is a good habit,即使你只是在做一些小而無意義的作業代碼。它可以讓你發現一些你會錯過的愚蠢錯誤,並且確保你不會因爲修改它而破壞現有的代碼(特別是最後一分鐘的修改)。

example這樣一個Makefile文件(這裏我沒有什麼可從測試版本除了因爲它是一個僅有頭組件):

all: 
    g++ -O2 -Wall -Werror -std=c++11 test_polynomial.cc -o test_polynomial -lgmp 
    g++ -O2 -Wall -Werror -std=c++11 test_g2polynomial.cc -o test_g2polynomial 
    ./test_polynomial --log_level=test_suite 
    ./test_g2polynomial --log_level=test_suite 

clean: 
    rm -f test_polynomial test_g2polynomial 

注意:這個例子是不是因爲我不很好的一個t甚至將CFLAGS中的構建選項分解。如果我想添加一個標誌,我必須在兩個命令中添加它!

另一個好處是你總是運行make來構建任何語言,依賴甚至構建系統(當使用scons或其他構建系統處理項目時,我仍然編寫一個Makefile來執行我所做的所有命令當建設和測試!)。

這允許我的個人補充(但在這裏,我們完全離題):我有一個名爲autobuild的構建腳本在make each time I write a file in vim上循環。我在屏幕上編碼並在small window at the bottom of my screen中運行autobuild。這樣,每當我寫入文件時,就會建立並測試每個更改。