cmake:CMAKE_REQUIRED_FLAGS 和以“/D”开头的标志
cmake: CMAKE_REQUIRED_FLAGS and flags that start with "/D"
我正在尝试使用 CMake 交叉编译一个库。目标平台是非标准的。该库有几个 try_compile
命令。特别是 CheckTypeSize.cmake 中的那些失败了。为了编译成功,我需要更改那些 try_compile
命令使用的标志和 link 库(我不想修改 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
将只尝试静态库链接(而不是可执行文件)。
参考资料
CMAKE_TRY_COMPILE_TARGET_TYPE
- How to partially disabling cmake C/C++ custom compiler checking
我正在尝试使用 CMake 交叉编译一个库。目标平台是非标准的。该库有几个 try_compile
命令。特别是 CheckTypeSize.cmake 中的那些失败了。为了编译成功,我需要更改那些 try_compile
命令使用的标志和 link 库(我不想修改 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
将只尝试静态库链接(而不是可执行文件)。
参考资料
CMAKE_TRY_COMPILE_TARGET_TYPE
- How to partially disabling cmake C/C++ custom compiler checking