我正在尝试交叉编译用于嵌入式ARM Cortex构建的项目,但是无法使链接器正常工作。我想使用armlink,但是没有文件传递到armlink,因此没有产生.elf文件。

我的CMakeLists.txt非常简单,在下面给出。在显示失败后显示失败,该错误表明armlink已由makefile调用而没有任何参数。

任何指针都会有所帮助-我搜索并阅读了许多帖子,但它们似乎都涉及更多的要求。

cmake_minimum_required(VERSION 2.8)

project(test_arm)
enable_language(C ASM)

# Cross-compilation for ARM
SET(CMAKE_C_COMPILER armcc)
SET(CMAKE_LINKER armlink)
SET(CMAKE_C_LINK_EXECUTABLE armlink)

SET(CMAKE_C_FLAGS "--cpu=Cortex-M3")
SET(LINK_FLAGS "--map --ro-base=0x0 --rw-base=0x0008000 --first='boot.o(RESET)' --datacompressor=off")
SET(CMAKE_EXE_LINKER_FLAGS "--map --ro-base=0x0 --rw-base=0x0008000 --first='boot.o(RESET)' --datacompressor=off")

include_directories(../include)

add_executable(blinky blinky.c)
set_target_properties(blinky PROPERTIES LINKER_LANGUAGE C)

失败如下,但是考虑到我的CMakeLists中存在一些愚蠢的问题,对于某些人来说,这显然是显而易见的:
$ make VERBOSE=1
[100%] Building C object CMakeFiles/blinky.dir/blinky.c.o
/usr/bin/cmake -E cmake_link_script CMakeFiles/blinky.dir/link.txt --verbose=1
armlink
Linking C executable blinky
Product: DS-5 Professional 5.21.0 [5210017]
Component: ARM Compiler 5.05 update 1 (build 106)
Tool: armlink [4d0efa]
For support see http://www.arm.com/support/
Software supplied by: ARM Limited
Usage: armlink option-list input-file-list
where
....

我期望CMake生成的Makefile可以通过以下方式调用armlink:
armlink --map --ro-base=0x0 --rw-base=0x0008000 \
  --first='boot.o(RESET)' --datacompressor=off \
  CMakeFiles/blinky.dir/blinky.c.o -o blinky.elf

最佳答案

CMake v3.5开始,您不再需要Keil ARM C/C++编译工具的工具链:



只需相应地设置您的C/CXX编译器变量

cmake -DCMAKE_C_COMPILER:PATH="C:\Program Files (x86)\DS-5\bin\armcc.exe"
      -DCMAKE_CXX_COMPILER:PATH="C:\Program Files (x86)\DS-5\bin\armcc.exe"
      ...

引用
  • ARMCC toolchain support
  • Add support for the ARM Compiler (arm.com)
  • CMake Error at CMakeLists.txt:30 (project): No CMAKE_C_COMPILER could be found
  • 关于c - 与特定链接器的CMake交叉编译不会将参数传递给armlink,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30313387/

    10-14 10:19