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