2012-04-18 59 views
5

我想讓我的gcc默認添加一些標誌,是否有乾淨的方式來做到這一點?默認添加一些標誌爲gcc(最好使用規格文件)

基本上我每次調用gcc時都會傳遞一些標誌,例如(但不限於)-g(以便它具有調試信息)。

有幾種解決方法,但他們是醜陋:

  1. alias g++=...,但我不喜歡這種方法;
  2. 寫一個包裹g ++的腳本,類似於1;
  3. ...

我寧願只是修改規範文件,以便一切都是無縫的。

+0

可能重複[如何設置gcc 4.3默認規格文件?](http://stackoverflow.com/questions/5778449/how-to-set-gcc-4-3-default-specs -file) – 2015-05-15 08:45:25

回答

1

修改規格文件的麻煩是,你改變了主意關於某些選項,你不能從命令行取消它;你必須去修改規格文件。在升級編譯器時,您還必須記住重新調整新的規格文件。

另外,您從命令行運行編譯器的頻率如何?我知道我直接做的唯一一件事情就是當我需要暫時修改一個命令行時,我不會爲編譯makefile中的編譯器選項而煩惱,所以我將編譯行從輸出make,然後運行編譯器。 alias的一個問題是它在makefile內不起作用。所以,對我來說,問題會減少到確保每個makefile中都使用編譯器選項。

+1

除了從命令行調用它外,還有合法的用例。您可能想教GCC驅動程序在哪裏找到替代libc,例如...或替代標題。或者添加「默認」標題。 – 0xC0000022L 2015-09-21 17:27:58

7

運行strace gcc | grep specs查看它在哪裏搜索規格文件,然後轉到那裏並運行gcc -dumpspecs > specs。您現在有一個可供編輯的規格文件。使用此引用:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html

+3

您需要在'|'之前添加2>&1,因爲strace會輸出到stderr。我在我的虛擬機上測試了這個想法,在strace輸出提供的位置添加一個修改過的specs文件,然後在虛擬cpp上運行g ++ -v,觀察預期的選項。 – Syncopated 2012-11-14 14:38:08

+0

你能向我們展示一個例子嗎?例如。如何添加默認鏈接器選項,那是所有的時間?或者一個C++編譯器選項,或一個C編譯器選項? – Calmarius 2016-01-08 13:46:52

+0

這個spec文件看起來相當複雜。有很多%的標記和{}可以向我們展示一個示例如何向鏈接器,C編譯器或C++編譯器添加默認選項? – Calmarius 2016-01-08 13:48:14