target_compile_options()仅用于C++文件?

ric*_*h.e 14 c++ cmake

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

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

Flo*_*ian 17

你可以用生成器表达式做到这一点:

target_compile_options(MyLib PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=c++14>)
Run Code Online (Sandbox Code Playgroud)

替代

但在这种特殊情况下,更多独立于平台的方式就是使用它target_compile_features().我不确定您使用的是哪种编译器功能,因此以下只是一个示例:

target_compile_features(MyLib PUBLIC cxx_explicit_conversions)
Run Code Online (Sandbox Code Playgroud)

  • 请不要通过操作编译器选项来设置C ++标准。从cmake 3.1开始,cmake允许用户通过将`CXX_STANDARD`属性设置为11来通过目标属性设置预期的编译器标准。 (2认同)