【问题标题】:cmake: CMAKE_REQUIRED_FLAGS and flags that start with "/D"cmake: CMAKE_REQUIRED_FLAGS 和以“/D”开头的标志
【发布时间】:2016-08-24 18:09:53
【问题描述】:

我正在尝试使用 CMake 交叉编译一个库。目标平台是非标准的。库中有几个try_compile 命令。特别是 CheckTypeSize.cmake 中的那些失败了。为了使编译成功,我需要更改那些try_compile 命令使用的标志和链接库(并且我不想修改 CMake 安装)。似乎在该模块中使用了(未记录的)CMAKE_REQUIRED_LIBRARIESCMAKE_REQUIRED_FLAGS。在工具链文件中,我这样做:

set(CMAKE_REQUIRED_FLAGS "/DLL")

不幸的是,我想设置一个以/D 开头的标志(在本例中为/DLL)。当我这样做时,变量被翻译成/D LL。有什么方法可以向 CMake 表明不应将字符串解析为编译定义?

【问题讨论】:

  • 向我们展示一些最少的代码,您使用的哪个模块包含未记录的内容?
  • 好吧,我只是说 CMAKE_REQUIRED_FLAGS 没有记录在公共文档中,只是在那些 cmake(内部)模块文件的开头。
  • 我的建议是更新到 CMake 3.6 并添加 set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)。另见herehere
  • @Florian - 解决了我的问题 - 将其添加为答案,我会接受。

标签: c++ cmake cross-compiling


【解决方案1】:

把我的评论变成答案

请不要使用内部 CMake 命令。在您的情况下,我的建议 - try_compile 无法在交叉编译环境中工作并且链接器抛出错误 - 是更新到 CMake 3.6 并添加

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

然后 CMake 的 try_compile 将只尝试静态库链接(而不是可执行文件)。

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2012-04-13
    • 1970-01-01
    • 2011-04-02
    • 2016-08-13
    • 2017-11-28
    • 2018-03-08
    相关资源
    最近更新 更多