如何停止关于重新定义的uugxx_ABI_u版本的GCC警告?

如何停止关于重新定义的uugxx_ABI_u版本的GCC警告?,gcc,cmake,g++,Gcc,Cmake,G++,在处理中描述的相同问题时,仅针对不同的特定版本,我已将以下内容添加到顶级CMakeLists.txt文件中: add_definitions(-D__GXX_ABI_VERSION=1002) …因为1002是我构建的wxWidgets想要的版本。好,太好了,;现在编译的程序将运行。但现在,当我执行make时,每个编译的文件都会发出以下警告: <command-line>: warning: "__GXX_ABI_VERSION" redefined <built-in>

在处理中描述的相同问题时,仅针对不同的特定版本,我已将以下内容添加到顶级CMakeLists.txt文件中:

add_definitions(-D__GXX_ABI_VERSION=1002)
…因为1002是我构建的wxWidgets想要的版本。好,太好了,;现在编译的程序将运行。但现在,当我执行make时,每个编译的文件都会发出以下警告:

<command-line>: warning: "__GXX_ABI_VERSION" redefined
<built-in>: note: this is the location of the previous definition

是的,我知道我在命令行上重新定义了ABI版本,我想我知道它以前是以某种内置方式定义的,但我是故意这么做的。有什么我可以添加到我的CMakeLists.txt文件,以得到特定的警告抑制?我不想抑制任何其他重新定义警告;就是那个特别的。我已经开始将make的stderr重定向到一个文件,并对其进行错误筛选:为了从大量警告中找出实际的编译错误,这是一件痛苦的事情……

我认为手动更改版本不是一个好主意。你可能会有意想不到的行为。解决此问题的正确方法是真正使用预期版本,而不是修补版本名

但是,要回答您的问题,您可以尝试

add_definitions(-U__GXX_ABI_VERSION=0LD) #replace 0LD by the old version
add_definitions(-D__GXX_ABI_VERSION=1002)
多亏了他的鼓励,我调查了GCC选项的影响——fabi版本=。。。。瞧,指定-fabi version=2会导致将uuu GXX_ABI_version定义为1002。因此,解决办法是:

改变

add_definitions(-D__GXX_ABI_VERSION=1002)


虽然我同意你谨慎的逻辑,但这似乎是一个广泛建议的方法,我对风险感到满意。我将尝试你建议的具体方法——使用旧值;我用简单的-U_U_ugxx_ABI_VERSION-D_ugxx_ABI_VERSION=1002进行了尝试,显然-U优先,代码构建时根本没有定义符号。恐怕您的建议只会导致额外的警告::警告:UNDE指令末尾有额外的标记。但是我刚刚确定适当的ABI版本控制参数,-fabi version=2将值设置为1002。因此,感谢你的警告,这促使我找到一个替代我目前的方法!
add_definitions(-fabi-version=2)