找到有问题的宏
Finding the problematic macro
自从加入项目以来,我的编译输出一直是这样的:
[ 0%] Building CXX object lib-tests/gmock/CMakeFiles/gmock_main.dir/gtest/src/gtest-all.cc.o
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
[ 0%] Building CXX object lib-tests/gmock/CMakeFiles/gmock_main.dir/src/gmock-all.cc.o
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
[ 0%] Building CXX object lib-tests/gmock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
[ 0%] Linking CXX static library libgmock_main.a
[ 0%] Built target gmock_main
等等。在整个项目的每个文件被编译到 100% 之间总是有这个警告。这只是编译的开始,它从 google 测试库开始,但我并不特别怀疑它是错误宏的来源。 (但它可能是)这很奇怪,因为当我 google 这个警告时,人们得到了代码和宏的快照,但我的编译器不这样做,我只得到警告。
我在 Debian 上使用带有 gnu 编译器和 cmake 的 CLion。我尝试了多个正则表达式来查找没有空格的宏,但没有找到任何成功。我应该如何识别生成此警告的宏?
感谢@stefan 对我的问题的评论,从我的 CMakeLists.txt
文件中删除 2 个标记解决了这个问题。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -O0 -g -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_RULE_MESSAGES:BOOL=ON")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -O0 -g")
我仔细检查并删除这些标志不会隐藏编译器警告,如未使用的变量等。我不确定删除这些标志会有什么影响。
自从加入项目以来,我的编译输出一直是这样的:
[ 0%] Building CXX object lib-tests/gmock/CMakeFiles/gmock_main.dir/gtest/src/gtest-all.cc.o
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
[ 0%] Building CXX object lib-tests/gmock/CMakeFiles/gmock_main.dir/src/gmock-all.cc.o
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
[ 0%] Building CXX object lib-tests/gmock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:23: warning: ISO C99 requires whitespace after the macro name
<command-line>:0:20: warning: ISO C99 requires whitespace after the macro name
[ 0%] Linking CXX static library libgmock_main.a
[ 0%] Built target gmock_main
等等。在整个项目的每个文件被编译到 100% 之间总是有这个警告。这只是编译的开始,它从 google 测试库开始,但我并不特别怀疑它是错误宏的来源。 (但它可能是)这很奇怪,因为当我 google 这个警告时,人们得到了代码和宏的快照,但我的编译器不这样做,我只得到警告。
我在 Debian 上使用带有 gnu 编译器和 cmake 的 CLion。我尝试了多个正则表达式来查找没有空格的宏,但没有找到任何成功。我应该如何识别生成此警告的宏?
感谢@stefan 对我的问题的评论,从我的 CMakeLists.txt
文件中删除 2 个标记解决了这个问题。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -O0 -g -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_RULE_MESSAGES:BOOL=ON")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -O0 -g")
我仔细检查并删除这些标志不会隐藏编译器警告,如未使用的变量等。我不确定删除这些标志会有什么影响。