clang: 警告:编译期间未使用的参数:'-stdlib=libc++'

6

我找不到太多相关信息。是什么导致clang发出这个警告?

我的开发机上运行一个cmake脚本,一切正常。同样的cmake文件被在构建服务器上执行时,总是会输出以上错误信息。

构建服务器正在运行clang3.8,而我的开发机正在运行clang4。我也无法通过一个简单的解决方案来复制该问题。 例如,一个简单的main.cpp不会导致此错误:

clang++ main.cpp -std=c++14 -stdlib=libc++

即使在构建机器上也可以正常工作。

有什么想法,为什么会打印出来?

这是我使用的标志:

set(LIBRARY_RELEASE_OPTIONS "-Wall;-Wextra;-pedantic;-Wlong-long;-Wmissing-braces;-Wunused-function;-Wuninitialized;-Wunused-label;-Wunused-parameter;-Wdisabled-optimization;-O2;-std=c++14;")
add_library(${SHARED_LIBRARY_NAME} STATIC ${SERVER_SOURCE})                                             
target_compile_options(${SHARED_LIBRARY_NAME} PUBLIC "$<$<CONFIG:RELEASE>:${LIBRARY_RELEASE_OPTIONS}>")

3
你可能有一个选项可以使'-stdlib=libc++'不被使用。-nostdinc++是其中之一。 - Jarod42
你的命令行中提供了几个 -stdlib= 选项吗? - Jarod42
2
请提供有问题的命令行,顺便说一句。 - Jarod42
@Jarod42 哦,好的。我不知道这是否相关,但我正在使用cmake构建静态库,然后将其与我的其他可执行文件链接在一起。我记不得在没有构建静态库时收到过这个消息。删除stdlib也不起作用,所以我卡住了。 - Crippin
2
@Jarod42 我找到了问题所在,当我移除ccache后,一切都按预期工作了...不再有警告了。但我真的想使用ccache。 - Crippin
显示剩余4条评论
2个回答

1

这个问题似乎与ccache有关。 在Ubuntu 16 LTS上,ccache 3.2.4会导致此警告,而ccache 3.3.3则能够正常工作。


有趣,这是一个已知的错误吗?我正在使用3.3.4版本。 - Chris Beck

0

如果您想要消除警告,请在 LIBRARY_RELEASE_OPTIONS 中添加 -Wno-error=unused-command-line-argument,这是使用 ccache、distcc 等必需的。

此外,最好使用 set(CMAKE_CXX_STANDARD 14) 而不是将 -std=c++14; 添加到 LIBRARY_RELEASE_OPTIONS 中。


这会解决问题吗?还是这个建议是最佳实践提示? - Crippin
这样做可以让CMake决定最好的方式,而不仅仅是消耗一个列表并将其传递下去。 - Cinder Biscuits
@Crippin更新了我的答案,提供了更适合您的内容。 - Cinder Biscuits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接