我正在尝试使用 cmake 进行一些交叉编译。对于 Internet 上的所有示例,有些很容易,我设法在 Linux(x86 和 ARM)、Windows 和 Android 上交叉编译我的库。但现在我想在自定义平台上进行。
我需要实现的过程:
- 采购我的环境(这会破坏所有以前的 bash 经典环境)
- 用cmake编译
- 执行我想要的
但 Cmake 正在测试我的自定义 C/C++ 库中的符号,这使得我的库无法编译。我遇到的错误是 cmake 某些版本的 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 仍在检查符号。
最佳答案
在没有您的环境和错误消息的情况下,很难说出真正的根本原因,但这里有两个常见原因和相应的修复方法:
如果您没有完整的 toolchain file为您的自定义环境创建 - 因此 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 Cross Compiling: Setting up the system and toolchain :
If your target is an embedded system without OS set CMAKE_SYSTEM_NAME to "Generic"
引用资料
关于c++ - 如何部分禁用 cmake C/C++ 自定义编译器检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700198/