使用cmake的target_compile_features和biicode

时间:2015-05-04 23:59:33

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

1 个答案:

答案 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