否定GCC的先前-D[efine]标志

否定GCC的先前-D[efine]标志,gcc,command-line,preprocessor-directive,gnustep,Gcc,Command Line,Preprocessor Directive,Gnustep,在ArchLinux上的GNUStep下,我在新安装时遇到了一个有趣的错误 使用我的构建系统,我运行 gcc `gnustep-config --debug-flags` [other command line args] 以便根据操作系统的必要标志构建命令行 这在Ubuntu下运行良好,但在Arch Linux上,我遇到了一个相当随机的错误: /usr/include/features.h:328:4:错误:#警告"加强"源代码需要使用优化(-O)[-Werror=cpp]进行编译 那么,g

在ArchLinux上的GNUStep下,我在新安装时遇到了一个有趣的错误

使用我的构建系统,我运行

gcc `gnustep-config --debug-flags` [other command line args]
以便根据操作系统的必要标志构建命令行

这在Ubuntu下运行良好,但在Arch Linux上,我遇到了一个相当随机的错误:

/usr/include/features.h:328:4:错误:#警告"加强"源代码需要使用优化(-O)[-Werror=cpp]进行编译

那么,
gnustep config--debug flags
会给出以下内容:

-MMD-MP-D_-FORTIFY_-SOURCE=2-DGNUSTEP-DGNUSTEP-BASE_-LIBRARY=1-DGNU-GUI-LIBRARY=1-DGNU-RUNTIME=1-DGNUSTEP-BASE_-LIBRARY=1-fno严格别名-pthread-fPIC-g-DDEBUG-fno省略框架指针-Wall-DGSWARN-DGSWARN-DGSDIAGNOSE-Wno导入-march=x86-64-mtune=generic-pipe-fstack-protector-strong-param=ssp缓冲区大小=4-fgnu运行时-fconstant string class=NSConstantString-fexec charset=UTF-8-I.-I/home/qix/GNUstep/Library/Headers-I/usr/include-DúFORTIFY\u SOURCE=2-I/usr/include-I/usr/include-I/usr/libffi-3.1/include/-I/usr/libffi/usr/libffi-3.1/include-I/usr/usr/include/libxml2-1

同样,我不希望在调试构建中进行优化(后来我甚至将GNUStep的
-g
参数重写为
-g2

在调用
gnustep config
之后,是否有方法在命令行中稍后显式取消定义
-D_FORTIFY_SOURCE

比如说

gcc `gnustep-config --debug-flags` -U_FORTIFY_SOURCE ...
其中
-U
取消定义先前定义的宏


值得一提的事情;我特意启用了
-Werror
,我想保留它。

现在,使用sed来解决这个问题。这似乎是一个由
\u FORTIFY\u SOURCE
引起的问题,并且没有一个简单的解决方案

`gnustep-config --debug-flags | sed 's/-D_FORTIFY_SOURCE=2//g'`