否定 GCC 的先前 -D[efine] 标志
Negate previous -D[efine] flag for GCC
在 Arch Linux 上的 GNUStep 下,我 运行 在全新安装时遇到了一个有趣的错误。
使用我的构建系统 运行
gcc `gnustep-config --debug-flags` [other command line args]
为了根据操作系统的必要标志构建命令行。
这在 Ubuntu 下工作正常,但在 Arch Linux 上我遇到了一个相当随机的错误:
/usr/include/features.h:328:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-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
)。
有没有办法在调用 gnustep-config
之后在命令行中 显式取消定义 -D_FORTIFY_SOURCE
?
例如,
gcc `gnustep-config --debug-flags` -U_FORTIFY_SOURCE ...
哪里 -U
取消定义了之前定义的宏?
有话要说;我特意启用了 -Werror
,我想保留它。
目前,使用 sed 解决这个问题是可行的。看来这是 known issue 和 _FORTIFY_SOURCE
引起的问题,并且没有直接的修复方法。
`gnustep-config --debug-flags | sed 's/-D_FORTIFY_SOURCE=2//g'`
在 Arch Linux 上的 GNUStep 下,我 运行 在全新安装时遇到了一个有趣的错误。
使用我的构建系统 运行
gcc `gnustep-config --debug-flags` [other command line args]
为了根据操作系统的必要标志构建命令行。
这在 Ubuntu 下工作正常,但在 Arch Linux 上我遇到了一个相当随机的错误:
/usr/include/features.h:328:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-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
)。
有没有办法在调用 gnustep-config
之后在命令行中 显式取消定义 -D_FORTIFY_SOURCE
?
例如,
gcc `gnustep-config --debug-flags` -U_FORTIFY_SOURCE ...
哪里 -U
取消定义了之前定义的宏?
有话要说;我特意启用了 -Werror
,我想保留它。
目前,使用 sed 解决这个问题是可行的。看来这是 known issue 和 _FORTIFY_SOURCE
引起的问题,并且没有直接的修复方法。
`gnustep-config --debug-flags | sed 's/-D_FORTIFY_SOURCE=2//g'`