如何部分禁用 cmake C/C++ 自定义编译器检查

bap*_*ste 4 c c++ compilation cmake

我正在尝试使用 cmake 进行一些交叉编译。有些很容易使用互联网上的所有示例,我设法在 Linux(x86 和 ARM)、Windows 和 Android 上交叉编译我的库。但现在我想在自定义平台上进行。

我需要实现的流程:

  1. 获取我的环境(这会破坏所有以前的 bash 经典环境)
  2. 使用cmake编译
  3. 执行我想要的

但 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 仍在检查符号。

Flo*_*ian 6

在没有您的环境和错误消息的情况下,很难说出实际的根本原因,但以下是两个常见原因和相应的修复方法:

  1. 如果您没有为自定义环境创建完整的工具链文件- 因此 CMake 无法链接简单的测试程序 - 您可以尝试名为 的相对较新(版本 3.6)的全局 CMake 变量CMAKE_TRY_COMPILE_TARGET_TYPE

    所以只需添加以下内容:

    set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
    
    Run Code Online (Sandbox Code Playgroud)

    然后 CMake 会尝试构建一个静态库。

  2. 要仅设置最常见的 GCC 编译器变量并仅进行一些基本检查,请尝试:

    SET(CMAKE_SYSTEM_NAME Generic)
    
    Run Code Online (Sandbox Code Playgroud)

    请参阅CMake 交叉编译:设置系统和工具链

    如果您的目标是没有操作系统的嵌入式系统,请将 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)
    ...

对我有用。