【发布时间】: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 的编译器检查。
为了让我的交叉构建工具链正常工作,我有两个选择:
- 我想要支持交叉构建的每个 CMake 文件都必须检查我们是否正在为嵌入式设备构建,如果是,请运行
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)。这很烦人,因为它迫使所有项目都必须考虑嵌入。 - 或者,以某种方式将
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
-
您似乎混淆了 answers 和 cmets。目前,@BrandonDyer 提供了唯一的答案。我和你的帖子是cmets,不是答案。如果您找到问题的解决方案,您可以添加自己的答案 (self-answer),甚至接受它(绿色标记)为您工作。