如何部分禁用cmake C/C++自定义编译器检查
How to partially disabling cmake C/C++ custom compiler checking
我正在尝试使用cmake进行一些交叉编译。有些很容易在互联网上使用所有的例子,我设法在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仍在检查符号。
在没有环境和错误消息的情况下,很难说出实际的根本原因,但以下是两个常见原因和相应的修复方法:
-
如果您没有为自定义环境创建完整的工具链文件,因此CMake无法链接简单的测试程序,那么您可以尝试相对较新的(3.6版)全局CMake变量
CMAKE_TRY_COMPILE_TARGET_TYPE
。所以只需添加以下内容:
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
然后CMake只会尝试构建一个静态库。
-
要只设置最常见的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)。。。
适用于我。
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 自定义创建QFuture
- 如何在QT中的自定义视频小工具t上绘制矩形