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

标签 c++ c compilation cmake

我正在尝试使用 cmake 进行一些交叉编译。对于 Internet 上的所有示例,有些很容易,我设法在 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)

还有:

include(CMakeForceCompiler)
...
cmake_force_c_compiler(${ENV_PATH}/bin/${CC})
cmake_force_cxx_compiler(${ENV_PATH}/bin/${CXX})

但 cmake 仍在检查符号。

最佳答案

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

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

    所以只需添加以下内容:

    set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
    

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

  2. 要仅设置最常见的 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/

相关文章:

c - Visual Studio : how to cope with warnings

c - 找出多组数字之间的最大差异

c - 初始化非常大的结构的正确方法是什么?

c++ - 归根结底,变量标识符是完全没有必要的吗?

c++ - 为什么这个 'a' = 2,而不是 7?

c++ - 如何从不同线程调用主 v8 循环中的函数

c++ - std::random_device 的线程安全

c++ - 在 C++ 中查找程序的运行时间

architecture - CMake多架构编译

javascript - 在 Coldfusion 中运行 CFGroovy 时如何在服务器端添加纯 javascript 编译器插件?