我有以下问题:
我正在使用CMake为我的嵌入式项目进行构建配置。为此,我使用了一个CMakeLists.txt文件以及一个flags.cmake和armgcc.cmake工具链文件,在其中我配置了arm-none eabi gcc编译器的使用。
我用以下命令调用cmake:
cmake -DCMAKE_TOOLCHAIN_FILE="armgcc.cmake" -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=debug
但当我尝试运行此程序时,我会收到错误消息:
-- Check for working C compiler: .../10 2021.10/bin/arm-none-eabi-gcc.exe - broken
CMake Error at .../CMake/share/cmake-3.22/Modules/CMakeTestCCompiler.cmake:69 (message):
The C compiler
".../10 2021.10/bin/arm-none-eabi-gcc.exe"
is not able to compile a simple test program.
在关于交叉编译的官方文件中,它说我必须添加
set(CMAKE_SYSTEM_NAME Generic)
以实现交叉编译。
我在armgcc.cmake文件和CMakeLists文件的顶部添加了这个命令,但得到了相同的错误。
只有当我添加时
set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_FORCED TRUE)
对于我的armgcc.cmake文件,测试被跳过,所有的配置和构建都很好。
有人能告诉我我是误解了什么还是做错了什么吗?为什么官方的CMAKE_SYSTEM_NAME方法对我不起作用?文件指出,强制方法不应用于3.6以上的版本。但如果没有它,我就无法让它运转起来。
提前感谢:(顺致敬意,Evox
这样其他人可能会发现这么快:
@u-235向我介绍了一个由@KamilCuk发布的工作解决方案:stackoverlow.com/a/5365241/8699689
似乎CMake调用编译器测试时使用了一组与操作系统相关的标志和设置,以与主机兼容。嵌入式编译器则缺少正确工作和链接目标的引用和参数(在发布的解决方案中有更多详细信息(。
解决方案是设置
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
在CMake文件中的project((命令之前。
官方文件也在这里确认了这一点
我希望他们能在";使用CMake进行交叉编译";我用作参考的章节。
谢谢你的回答:(顺致敬意,Evox402