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

时间:2015-01-23 07:51:30

标签: gcc command-line preprocessor-directive gnustep

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

使用我的构建系统我运行

gcc `gnustep-config --debug-flags` [other command line args]

为了根据操作系统的必要标志建立命令行。

这在Ubuntu下工作正常,但在Arch Linux上我得到了一个相当随机的错误:

  

/usr/include/features.h:328:4:错误:#warning _FORTIFY_SOURCE需要使用优化进行编译(-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-strict-aliasing -pthread -fPIC -g -DDEBUG -fno-omit-frame-pointer -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -march = x86-64 -mtune = generic -pipe -fstack-protector-strong --param = ssp-buffer-size = 4 -fgnu- runtime -fconstant-string-class = NSConstantString -fexec-charset = UTF-8 -I。 -I / home / qix / GNUstep / Library / Headers -I / usr / include -D_FORTIFY_SOURCE = 2 -I / usr / include -I / usr / include -I / usr / include -I / usr / lib / libffi-3.1 / include / -I / usr / lib / libffi-3.1 / include -I / usr / include / libxml2 -I / usr / include / p11-kit-1

同样,我希望不要对我的调试版本进行优化(后来我甚至将GNUStep' -g参数覆盖到-g2。)

在调用-D_FORTIFY_SOURCE后,有没有办法在命令行中显式取消定义 gnustep-config

例如,像

gcc `gnustep-config --debug-flags` -U_FORTIFY_SOURCE ...

-U取消定义先前定义的宏?

值得一提;我故意-Werror启用了,我想保留它。

1 个答案:

答案 0 :(得分:2)

目前,使用sed来解决这个问题。看来这是known issue _FORTIFY_SOURCE导致问题,而且没有直接的解决方法。

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