C++ gcc是否有放弃-g标志的选项?

C++ gcc是否有放弃-g标志的选项?,c++,linux,debugging,gcc,C++,Linux,Debugging,Gcc,我正在构建一个包,它提供了许多makefile,每个makefile都有硬编码,比如 CFLAGS = -g -O2 -Wall ... CXXFLAGS = -g -O2 -Wall ... gcc -option-im-looking-for -g file.c -o file 我想放弃-g选项,但我不想编辑所有的makefile(即使不是使用sed或类似工具自动编辑)。软件包附带的configure脚本没有启用/禁用调试选项,但我可以传递CFLAGS和cxflags变量,并将它们的值分

我正在构建一个包,它提供了许多makefile,每个makefile都有硬编码,比如

CFLAGS = -g -O2 -Wall ...
CXXFLAGS = -g -O2 -Wall ...
gcc -option-im-looking-for -g file.c -o file
我想放弃
-g
选项,但我不想编辑所有的makefile(即使不是使用
sed
或类似工具自动编辑)。软件包附带的
configure
脚本没有启用/禁用调试选项,但我可以传递
CFLAGS
cxflags
变量,并将它们的值分别连接到
CFLAGS
cxflags
变量,其中包括
-g
选项

如果指定了
-g
,是否有放弃该选项的选项?差不多

CFLAGS = -g -O2 -Wall ...
CXXFLAGS = -g -O2 -Wall ...
gcc -option-im-looking-for -g file.c -o file

将生成不带调试符号的二进制
文件
。我不想剥离二进制文件,我希望它被剥离创建。

您不需要编辑makefiles。只需覆盖命令行上的变量:

$ cat Makefile 
CFLAGS = -g -Wall
all:
    echo $(CFLAGS)
$ make
echo -g -Wall
-g -Wall
$ make CFLAGS=-Wall
echo -Wall
-Wall
您可以通过添加
-g0
来否定
-g
的效果。说

gcc -g -g0 foo.c -o file.o
将产生一个二进制,与通过以下方式获得的二进制相同:

gcc foo.c -o foo.o
引用
mangcc

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

嗯,您可以编写一个名为mygcc的脚本,该脚本解析接收到的参数,去除不需要的参数,并调用gcc。然后使用mygcc作为编译器。我不为这个答案感到骄傲^^^但是CFLAGS是一条很长的线(大约100个选项,包括等等),我不知道CFLAGS应该是什么。我所知道的是我不喜欢它的地方,但我不知道如何修复它。