2016-07-25 62 views
6

只有C++文件可以使用target_compile_options()吗?我想用它作为用作其他应用程序的依赖项的目标,以便库可以将其编译器标志传播到这些应用程序。但是,某些标志(如-std=c++14)如果与C或ObjC文件一起使用会导致构建失败。target_compile_options()仅适用于C++文件?

我读过,我应该CXX_FLAGS而不是将这些标志添加到C++文件,但是这不会(自动)通过cmake的包系统传播。

+0

IIRC'CXX_FLAGS'可以通过图书馆的包被传播[与前缀包名(https://开头的cmake .ORG/cmake的/帮助/ 3.0 /手动/ cmake的-packages.7.html)。 –

+0

* CMake的包装系统*是什么意思? – usr1234567

回答

7

解决方案

你可以用generator expressions做到这一点:

target_compile_options(MyLib PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=c++14>) 

替代

但在这种特定情况下做的更独立于平台的方式是使用target_compile_features() 。我不知道你使用的compiler feature,所以以下仅是一个例子:

target_compile_features(MyLib PUBLIC cxx_explicit_conversions) 
+0

伟大的发生器表达式正是我所需要的,谢谢。 target_compile_features的确看起来不错,尽管由于一些发行版本我们现在需要坚持使用cmake v3.0。 –

相关问题