gpt4 book ai didi

cmake - 如何通过编译标志来进行初始编译器测试?

转载 作者:行者123 更新时间:2023-12-04 04:18:13 26 4
gpt4 key购买 nike

我正在尝试使用CMake来构建将MSPGCC cross-compiler用于MSP430微 Controller 的项目。要使用它成功编译任何简单程序,我们需要传递一个指示目标处理器的编译标志,否则它将失败,如下所示:

$ msp430-gcc -o test test.c
In file included from test.c:1:0:
/usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/include/msp430.h:813:2: warning: #warning Unable to identify and include MCU header, use -mmcu=MCU [-Wcpp]
/usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld: cannot open linker script file memory.x: No such file or directory
collect2: ld returned 1 exit status

因此,如果我使用 -mmcu开关指示处理器,则可以正常工作。问题是,尽管我已经在自己的 CMakeLists.txt 文件中指定了它:
cmake_minimum_required (VERSION 2.6)

project (test-project C)

set (SOURCES
test.c
)

add_executable (test-project ${SOURCES})
set (CPU_FLAG "-mmcu=msp430f148")

set (CMAKE_C_FLAGS ${CPU_FLAG})
set (CMAKE_EXE_LINKER_FLAGS ${CPU_FLAG})

CMake提示编译器未能通过测试来编译一个简单程序,我敢打赌,这是因为它可能是 而不是-mmcu开关的(请注意有关无法打开链接描述文件memory.x的消息):
$ cd ~/git/test-project
$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../msp430.cmake ..
-- The C compiler identification is GNU 4.6.3
-- Check for working C compiler: /usr/local/bin/msp430-gcc
-- Check for working C compiler: /usr/local/bin/msp430-gcc -- broken
CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
The C compiler "/usr/local/bin/msp430-gcc" is not able to compile a simple
test program.

It fails with the following output:

Change Dir: /home/claudio/git/test-project/build/CMakeFiles/CMakeTmp



Run Build Command:/usr/bin/gmake "cmTryCompileExec2889462763/fast"

/usr/bin/gmake -f CMakeFiles/cmTryCompileExec2889462763.dir/build.make
CMakeFiles/cmTryCompileExec2889462763.dir/build

gmake[1]: Entering directory
`/home/claudio/git/test-project/build/CMakeFiles/CMakeTmp'

/usr/bin/cmake -E cmake_progress_report
/home/claudio/git/test-project/build/CMakeFiles/CMakeTmp/CMakeFiles 1

Building C object
CMakeFiles/cmTryCompileExec2889462763.dir/testCCompiler.c.o

/usr/local/bin/msp430-gcc -o
CMakeFiles/cmTryCompileExec2889462763.dir/testCCompiler.c.o -c
/home/claudio/git/test-project/build/CMakeFiles/CMakeTmp/testCCompiler.c

Linking C executable cmTryCompileExec2889462763

/usr/bin/cmake -E cmake_link_script
CMakeFiles/cmTryCompileExec2889462763.dir/link.txt --verbose=1

/usr/local/bin/msp430-gcc
CMakeFiles/cmTryCompileExec2889462763.dir/testCCompiler.c.o -o
cmTryCompileExec2889462763 -rdynamic

/usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld: cannot open
linker script file memory.x: No such file or directory

collect2: ld returned 1 exit status

gmake[1]: Leaving directory
`/home/claudio/git/test-project/build/CMakeFiles/CMakeTmp'

gmake[1]: *** [cmTryCompileExec2889462763] Error 1

gmake: *** [cmTryCompileExec2889462763/fast] Error 2





CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:3 (project)

-- Configuring incomplete, errors occurred!

仅作记录,我的工具链文件如下,我的PATH变量允许它在 /usr/local/bin处找到编译器二进制文件:
# the name of the target operating system
#SET(CMAKE_SYSTEM_NAME Linux)

# which C and C++ compiler to use
SET(CMAKE_C_COMPILER msp430-gcc)
SET(CMAKE_CXX_COMPILER msp430-g++)

# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH /usr/local/msp430)

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

说了这么多,谁能告诉我如何检查CMake使用哪个编译标志来进行编译器测试,以及如何传递自定义标志(例如 -mmcu),这样它才不会失败?

最佳答案

根据文档:

http://www.cmake.org/Wiki/CMake_Cross_Compiling#The_toolchain_file

您应该使用CMakeForceCompiler东西

INCLUDE(CMakeForceCompiler)

# this one is important
SET(CMAKE_SYSTEM_NAME eCos)

# specify the cross compiler
CMAKE_FORCE_C_COMPILER(arm-elf-gcc GNU)
CMAKE_FORCE_CXX_COMPILER(arm-elf-g++ GNU)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /home/alex/src/ecos/install )

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

(从文档中复制并粘贴)

也可以在我的MSP430上使用它

关于cmake - 如何通过编译标志来进行初始编译器测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13012937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com