1

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

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

target_compile_features(${BII_BLOCK_TARGET} PRIVATE cxx_auto_type)

运行 bii build 时,我遇到了这个错误:

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 的情况下,失败,因为没有这样的标志)。

4

1 回答 1

1

我对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

于 2015-05-05T07:26:32.550 回答