1

我正在将我的库拆分为仅标头库和已编译库,因此,我第一次尝试使用 CMake 来“构建”,或者更确切地说,公开仅标头库图书馆。

阅读文档和 CMake 文档,我知道我需要使用没有源的 INTERFACE 库。但是 - 我的头文件必须使用至少 C++11 的 C++ 语言标准版本进行编译。当我实际编译一些东西时,我做了:

set_property(TARGET foo PROPERTY CXX_STANDARD 11)
set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET foo PROPERTY CXX_EXTENSIONS OFF)

但那是:

  1. 不完全是我需要使用仅标头库的代码 - 我需要说“至少 C++11”。
  2. 不能用于 INTERFACE 库。

我注意到没有set_property(... INTERFACE). 那么我应该如何强制依赖代码使用 C++11 或更高版本?

编辑:我对在依赖项中限制确切的C++ 版本选择的答案和限制“至少”的答案都感兴趣——以防后者有问题/困难/不可能。

4

1 回答 1

2

如果你有一个相当新的 cmake 版本,你可以试试

target_compile_features(foo INTERFACE cxx_std_11)

这确保了每个使用 foo 的库,即

target_link_libraries(bar PRIVATE foo)

将使用 C++11 编译。例如,如果 bar 使用源文件bar.cpp,那么bar.cpp将由 cmake 使用std=c++11进行编译。

于 2020-06-29T09:46:48.623 回答