我试图在我的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的情况下,失败,因为没有这样的标志)。
答案 0 :(得分: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