bap*_*ste 4 c c++ compilation cmake
我正在尝试使用 cmake 进行一些交叉编译。有些很容易使用互联网上的所有示例,我设法在 Linux(x86 和 ARM)、Windows 和 Android 上交叉编译我的库。但现在我想在自定义平台上进行。
我需要实现的流程:
但 Cmake 正在测试我的自定义 C/C++ 库中的符号,这使得我的库无法编译。我遇到的错误是 cmake 某些版本的 GLIBCXX 和 CXXABI (没有 C 问题),但不是全部。
有没有办法让 cmake 可以接受它?
编辑:
我尝试使用:
set(CMAKE_C_COMPILER_WORKS TRUE)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
Run Code Online (Sandbox Code Playgroud)
与:
include(CMakeForceCompiler)
...
cmake_force_c_compiler(${ENV_PATH}/bin/${CC})
cmake_force_cxx_compiler(${ENV_PATH}/bin/${CXX})
Run Code Online (Sandbox Code Playgroud)
但 cmake 仍在检查符号。
在没有您的环境和错误消息的情况下,很难说出实际的根本原因,但以下是两个常见原因和相应的修复方法:
如果您没有为自定义环境创建完整的工具链文件- 因此 CMake 无法链接简单的测试程序 - 您可以尝试名为 的相对较新(版本 3.6)的全局 CMake 变量CMAKE_TRY_COMPILE_TARGET_TYPE。
所以只需添加以下内容:
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
然后 CMake 会尝试构建一个静态库。
要仅设置最常见的 GCC 编译器变量并仅进行一些基本检查,请尝试:
SET(CMAKE_SYSTEM_NAME Generic)
Run Code Online (Sandbox Code Playgroud)
如果您的目标是没有操作系统的嵌入式系统,请将 CMAKE_SYSTEM_NAME 设置为“Generic”
参考
小智 5
命令行:
cmake ... \
-DCMAKE_C_COMPILER_FORCED=TRUE \
-DCMAKE_CXX_COMPILER_FORCED=TRUE
或者
CMakeLists.txt
...
设置(CMAKE_C_COMPILER_FORCED TRUE)
设置(CMAKE_CXX_COMPILER_FORCED TRUE)
...
对我有用。