如何部分禁用cmake C / C ++自定义编译器检查
我正在尝试使用cmake进行一些交叉编译。 有些很容易通过Internet上的所有示例,我设法在Linux(x86和ARM),Windows和Android上交叉编译我的库。 但现在我想在自定义平台上进行。
我需要实现的过程:
- 采购我的环境(这会摧毁所有以前的bash经典环境)
- 用cmake编译
- 执行我想要的
但是Cmake正在测试我的自定义C / C ++库中的符号,这使得我的库无法编译。 我遇到的错误是cibke某些版本的GLIBCXX和CXXABI(没有C问题),但不是全部。
有没有办法使cmake好吗?
编辑:
我试过用:
set(CMAKE_C_COMPILER_WORKS TRUE) set(CMAKE_CXX_COMPILER_WORKS TRUE)
与:
include(CMakeForceCompiler) ... cmake_force_c_compiler(${ENV_PATH}/bin/${CC}) cmake_force_cxx_compiler(${ENV_PATH}/bin/${CXX})
但是cmake仍在检查符号。
没有您的环境或错误消息,告诉实际的根本原因并不容易,但这里有两个常见原因和相应的修复:
-
如果您没有为自定义环境创建完整的工具链文件 – 因此CMake无法链接简单的测试程序 – 您可以尝试名为
CMAKE_TRY_COMPILE_TARGET_TYPE
的相对较新的(版本3.6)全局CMake变量。所以只需添加以下内容:
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
然后CMake将尝试构建一个静态库。
-
要仅设置最常见的GCC编译器变量并且只进行一些基本检查,请尝试:
SET(CMAKE_SYSTEM_NAME Generic)
请参阅CMake交叉编译:设置系统和工具链 :
如果您的目标是没有OS的嵌入式系统,则将CMAKE_SYSTEM_NAME设置为“Generic”
参考
- CMake AMRCC +自定义链接器
- 使用特定链接器的cmake交叉编译不会将参数传递给armlink