只有C++文件可以使用target_compile_options()
吗?我想用它作为用作其他应用程序的依赖项的目标,以便库可以将其编译器标志传播到这些应用程序。但是,某些标志(如-std=c++14
)如果与C或ObjC文件一起使用会导致构建失败。target_compile_options()仅适用于C++文件?
我读过,我应该CXX_FLAGS
而不是将这些标志添加到C++文件,但是这不会(自动)通过cmake的包系统传播。
只有C++文件可以使用target_compile_options()
吗?我想用它作为用作其他应用程序的依赖项的目标,以便库可以将其编译器标志传播到这些应用程序。但是,某些标志(如-std=c++14
)如果与C或ObjC文件一起使用会导致构建失败。target_compile_options()仅适用于C++文件?
我读过,我应该CXX_FLAGS
而不是将这些标志添加到C++文件,但是这不会(自动)通过cmake的包系统传播。
解决方案
你可以用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)
伟大的发生器表达式正是我所需要的,谢谢。 target_compile_features的确看起来不错,尽管由于一些发行版本我们现在需要坚持使用cmake v3.0。 –
IIRC'CXX_FLAGS'可以通过图书馆的包被传播[与前缀包名(https://开头的cmake .ORG/cmake的/帮助/ 3.0 /手动/ cmake的-packages.7.html)。 –
* CMake的包装系统*是什么意思? – usr1234567