有没有gcc选项可以丢弃-g标志?

12

我正在编写一个包,它提供了许多Makefile,每个Makefile内部都有硬编码的内容,例如

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

我想放弃-g选项,但我不想编辑所有的makefile(甚至不使用sed或类似工具自动进行编辑)。该软件包附带的configure脚本没有启用/禁用调试选项,但我可以通过传递CFLAGSCXXFLAGS变量来将它们的值连接到CFLAGSCXXFLAGS变量中,分别包括-g选项。

是否有一种选项可以在指定了-g的情况下放弃它?例如:

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

将二进制文件file构建为不含调试符号的版本。我不想去除二进制文件中的符号信息,而是希望创建时就去除。


嗯,你可以编写一个脚本来调用mygcc,解析接收到的参数,去除不需要的参数,并调用gcc。然后使用mygcc作为编译器。我对这个答案并不感到自豪^^ - johan d
2个回答

17
你可以通过添加-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.

1

您无需编辑makefiles。只需在命令行上覆盖变量:

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

但是CFLAGS是一行非常长的代码(大约100个选项,包括etc),我不应该知道CFLAGS应该是什么。我只知道我不喜欢它,但我不知道如何修复它。 - e271p314

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接