我正在尝试使用 CMake 交叉编译一个库。目标平台是非标准的。该库有几个 try_compile
命令。特别是, CheckTypeSize.cmake 中的那些失败了。为了编译成功,我需要更改那些 try_compile
命令使用的标志和链接库(我不想修改 CMake 安装)。似乎在该模块中使用了(未记录的)CMAKE_REQUIRED_LIBRARIES
和 CMAKE_REQUIRED_FLAGS
。在工具链文件中,我这样做:
set(CMAKE_REQUIRED_FLAGS "/DLL")
不幸的是,我想设置一个以 /D
开头的标志(在本例中为 /DLL
)。当我这样做时,变量被翻译成 /D LL
。有没有什么方法可以向 CMake 指示不应将字符串解析为编译定义?
最佳答案
将我的评论变成答案
请不要使用内部 CMake 命令。我在你的情况下的建议 - try_compile
在交叉编译环境中不工作并且链接器抛出错误 - 是更新到 CMake 3.6 并添加
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
然后 CMake 的 try_compile
将只尝试静态库链接(而不是可执行文件)。
引用资料
关于c++ - cmake:CMAKE_REQUIRED_FLAGS 和以 "/D"开头的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130265/