我正在用C ++ 11开发应用程序,我的编译器是CLang ++ 3.3。我也在Linux Mint 14上使用Netbeans 7.3 IDE。
我的所有测试都是使用GoogleTest(gtest-1.6.0)完成的,除了本文标题中提到的警告外,几乎所有内容都正常。
以下是netbeans执行的命令行示例:
clang++ -pedantic-errors -lgtest -pthread -c -g -Wall -std=c++11 -pedantic-errors -lgtest -pthread -MMD -MP -MF build/Debug/CLang-Linux-x86/_ext/1802678175/main.o.d -o build/Debug/CLang-Linux-x86/_ext/1802678175/main.o ../GIT_CryptoCode/src/main.cpp
我不知道为什么,但该命令包含两次属性,当然会给出相同的警告两次。这就是我在项目属性中所做的:
如果我删除了附加选项,则gtest不起作用,命令行变为如下所示:clang++ -c -g -Wall -std=c++11 ...
。我该怎么做才能让某些属性重复?
好吧,即使使用cmake,我也会收到Clang的警告(这次出现一次:))。我也用GCC 4.7进行了测试,但没有得到任何警告。这是我在GCC的cmake文件中使用的命令行:
set (CMAKE_CXX_FLAGS "-Winline -Wall -Werror -pedantic-errors -pthread -std=c++11")
因此,Clang似乎是个问题。有谁知道这个警告来自何处以及如何删除它?这是一个Clang bug吗?
感谢您的帮助。
答案 0 :(得分:4)
我要感谢@Fraser的帮助,帮助我找到删除警告的方法。基本上,不是在C ++编译器部分的附加选项中编写-pedantic-errors -lgtest -pthread
而是提供重复警告,这些属性应该在项目的链接器部分中。
因此,C ++编译器部分中的附加选项保留为空。现在,我可以毫无问题地使用-Werror属性。
另外,在cmake文件中,行
target_link_libraries(${Project_Name} ${GTEST_BOTH_LIBRARIES})
将gtest库链接到项目。因此,
中不需要-lgtest
set (CMAKE_CXX_FLAGS "-Winline -Wall -Werror -pedantic-errors -pthread -std=c++11")
对于GCC和Clang来说都是