2013-10-23 29 views
6

我建立了一個提供許多makefile文件,每個makefile文件已經很難在旁邊籤編碼方式類似於有沒有gcc的選項丟棄-g標誌?

CFLAGS = -g -O2 -Wall ... 
CXXFLAGS = -g -O2 -Wall ... 

我想放棄-g選擇,但我不希望編輯所有生成文件(甚至沒有自動sed或類似的東西)。該軟件包附帶的configure腳本沒有啓用/禁用調試選項,但我可以將它傳遞給CFLAGSCXXFLAGS變量,並將它們的值分別連接到CFLAGSCXXFLAGS變量,其中包括-g選項。

是否有一個選項在指定的情況下會丟棄-g?像

gcc -option-im-looking-for -g file.c -o file 

事情會建立二進制file沒有調試符號。我不想剝離二進制文件,我希望它被剝離。

+0

嗯你可以寫一個腳本,它調用mygcc來解析接收到的參數,去掉不需要的參數,然後調用gcc。然後使用mygcc作爲編譯器。我不爲這個答案感到自豪^^ –

回答

9

你可以加入-g0否定-g效果。話說

gcc -g -g0 foo.c -o file.o 

會產生一個二進制等同於獲得一個說

gcc foo.c -o foo.o 

報價man gcc

-glevel 
    ... 
     Level 0 produces no debug information at all. Thus, -g0 negates 
     -g. 
+0

你是男人!感謝您的回答 – e271p314

1

您不需要編輯makefile。只是覆蓋在命令行中的變量:

$ cat Makefile 
CFLAGS = -g -Wall 
all: 
    echo $(CFLAGS) 
$ make 
echo -g -Wall 
-g -Wall 
$ make CFLAGS=-Wall 
echo -Wall 
-Wall 
+0

但是CFLAGS是一個非常長的行(約100個選項,包括etc'),我不知道CFLAGS應該是什麼。我所知道的是我不喜歡它,但我不明白如何解決它。 – e271p314

0

由於CFLAGS是一個bash變量,你可以使用模式替換$ {VAR /模式/替換}像$ {CFLAGS/-g //}來刪除-g。檢查Parameter Substitution

+1

CFLAGS是makefile中的硬編碼字符串。我可以使用'find -name Makefile。 | xargs sed -i's/-g // g''。但爲什麼我應該?所有我需要做的是[devnull](http://stackoverflow.com/users/2235132/devnull)說。當我運行'configure'時,我添加了CFLAGS = -g0,問題就解決了。 – e271p314