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

How to partially disabling cmake C/C++ custom compiler checking

本文关键字:C++ 自定义 编译器 检查 cmake 何部      更新时间:2023-10-16

我正在尝试使用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)

与:

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

但cmake仍在检查符号。

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

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

    所以只需添加以下内容:

    set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
    

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

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

    SET(CMAKE_SYSTEM_NAME Generic)
    

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

    如果您的目标是没有操作系统的嵌入式系统,请将CMAKE_system_NAME设置为"Generic"

参考

  • CMake AMRC+自定义链接器
  • cmake与特定链接器交叉编译dons';t将参数传递给armlink

命令行:

cmake\-DCMAKE_C_COMPILER_FORCED=TRUE\-DCMAKE_CXX_COMPILER_FORCED=TRUE

CMakeLists.txt

。。。设置(CMAKE_C_COMPILER_FORCERD TRUE)设置(CMAKE_CXX_COMPILER_FORCERD TRUE)。。。

适用于我。