【问题标题】:using cmake's target_compile_features with biicode使用 cmake 的 target_compile_features 和 biicode
【发布时间】:2015-05-04 23:59:33
【问题描述】:

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

【问题讨论】:

  • TARGET_COMPILE_FEATURES的建议和建议:我会非常谨慎,即使在最新的CMake中,它的数据也是部分实现的,这意味着它对于像MinGW这样的编译器可能无法正常工作,视觉和可能的其他人。我建议在依赖它之前仔细检查它的行为。

标签: c++ cmake biicode


【解决方案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

【讨论】:

  • 是的,BII_BLOCK_TARGET 确实是一个 INTERFACE 目标,用于为给定块中的所有目标、其中的库和可执行文件收集公共属性。所以这应该可以工作,如果使用的编译器实际上是由 target_compile_features 管理的
  • 看起来应该可以,但我目前无法检查。我回家后试试看。
猜你喜欢
  • 2015-04-05
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多