【问题标题】:How to set CMAKE_TRY_COMPILE_TARGET_TYPE from outside CMake如何从 CMake 外部设置 CMAKE_TRY_COMPILE_TARGET_TYPE
【发布时间】:2019-03-06 14:57:08
【问题描述】:

tl;博士

给定一个我无法编辑的CMakeList.txt,我可以在配置该文件时将CMAKE_TRY_COMPILE_TARGET_TYPE 设置为STATIC_LIBRARY吗?

理想情况下,我可以通过环境变量来做到这一点,但如果这不可能,也可以将我的值作为命令行参数传递。

详情

我正在尝试使用GNU Arm Embedded Toolchain 构建Conan profile that will allow me to cross build

Conan 提供了一种机制来指定我希望 CMake 使用的编译器二进制文件和编译器 + 链接器标志,但我需要指定 set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) 以便 GNU Arm Embedded 通过 CMake 的编译器检查。

为了让我的交叉构建工具链正常工作,我有两个选择:

  1. 我想要支持交叉构建的每个 CMake 文件都必须检查我们是否正在为嵌入式设备构建,如果是,请运行set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)。这很烦人,因为它迫使所有项目都必须考虑嵌入。
  2. 或者,以某种方式将CMAKE_TRY_COMPILE_TARGET_TYPE 传递给CMake,而不编辑CMakeList.txt

我想做2。

【问题讨论】:

  • 首选方法是: 3.修改工具链文件,用于交叉编译。可能这是唯一可靠的方法,因为除了一些硬编码的东西之外,工具链是在try_compile 期间解析的唯一脚本。
  • 虽然其他答案很有帮助,但最适合 CMake 和 Conan 的解决方案是更新 Conan 以将 CONAN_CMAKE_TRY_COMPILE_TARGET_TYPE 添加到 env_vars:github.com/conan-io/conan/issues/4706
  • 您似乎混淆了 answerscmets。目前,@BrandonDyer 提供了唯一的答案。我和你的帖子是cmets,不是答案。如果您找到问题的解决方案,您可以添加自己的答案 (self-answer),甚至接受它(绿色标记)为您工作。

标签: c++ cmake conan


【解决方案1】:

您可以通过-D 标志获得您正在寻找的功能。

我会尝试这样的事情:cmake -D CMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多