将 cmake 的 target_compile_features 与 biicode 结合使用

using cmake's target_compile_features with biicode

我正在尝试在我的 biicode 块中使用 target_compile_feature。 据我所知,这是目前向 cmake 询问特定 C++ 标准版本的最佳方式,因为它将知道要添加到编译中的(如果有的话)标志,并且如果正在使用的编译器不这样做,则会失败并显示错误支持我们要求的功能。

我将这一行添加到我的非常简单的 CMakeLists.txt 中(与 biicode 博客中的 boost 示例没有任何变化):

target_compile_features(${BII_BLOCK_TARGET} PRIVATE cxx_auto_type)

当 运行 bii 构建时,我遇到了这个错误:

CMake Error at     bii_test/alchemist/blocks/sennin/deckbox_loader/CMakeLists.txt:13 (target_compile_features):
  target_compile_features may only be set INTERFACE properties on INTERFACE
  targets

在 PUBLIC 或 PRIVATE 范围内设置 cxx_auto_type 具有完全相同的结果。

我想避免使用 CXX_STANDARD 和 CXX_STANDARD_REQUIRED 因为第一个是软请求(如果不支持所请求的标准,cmake 仍将允许我们尝试构建代码)和第二个强制要求以某种方式请求对整个请求的标准标准的完全支持(在 Visual Studio 的情况下失败,因为没有这样的标志)。

我对bii一无所知,但大概BII_BLOCK_TARGET是它提供的东西吧?你应该将它与 target_link_libraries 或其他东西一起使用吗?

无论如何,请尝试 INTERFACE 关键字。

target_compile_features(${BII_BLOCK_TARGET} INTERFACE cxx_auto_type)

http://www.cmake.org/cmake/help/v3.2/manual/cmake-compile-features.7.html

http://www.cmake.org/cmake/help/v3.2/manual/cmake-buildsystem.7.html#transitive-usage-requirements