Ich versuche CMake für ein Projekt zu verwenden, das die MSPGCC cross-compiler für einen MSP430-Mikrocontroller verwendet. Um erfolgreich jede einfaches Programm zusammenstellen damit, brauchen wir einen Compiler-Flag übergeben Sie den Zielprozessor anzeigt, sonst schlägt es wie folgt aus:Wie übergebe ich ein Compile-Flag, um den Compiler-Test zu initialisieren?
$ 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
Daher, wenn ich den Prozessor mit dem -mmcu
Schalter anzuzeigen, es funktioniert gut. Das Problem ist, obwohl ich schon diese Angabe bin in meinem CMakeLists.txt Datei:
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 beschwert sich der Compiler den Test ein einfaches Programm zu kompilieren, ist fehlgeschlagen, die ich wette, geschieht, weil es wahrscheinlich ist nicht mit den -mmcu
Schalter (beachten sie die Meldung über nicht Linker Skriptdatei memory.x öffnen zu können):
$ 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!
Nur für das Protokoll, ist meine Toolchain-Datei wie folgt und meine PATH-Variable ermöglicht es finde die Compiler-Binärdateien bei /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)
Alles, was gesagt, kann mir jemand sagen, wie zu überprüfen, welche kompilieren Flags CMake wird mit dem Compiler-Test zu tragen, und wie können wir individuelle Flags (wie -mmcu
, zum Beispiel) passieren, damit es doesn‘ t versagt es?
wenn ich w Mit MSPGCC4 funktionierte es auch gut, aber jetzt, da ich den neueren MSPGCC benutze, versagt der Compilertest (MSPGCC4 wurde eingestellt und die Entwicklung kehrte zum ursprünglichen Projekt zurück). Der 'INCLUDE (CMakeForceCompiler)' hatte leider keine Wirkung. – Claudio
Es ist nicht nur das Include, es ist auch die zwei Zeilen CMAKE_FORCE_C_COMPILER (Arm-Elf-GCC GNU) CMAKE_FORCE_CXX_COMPILER (Arm-Elf-G + + GNU) - Sie haben sie auch? – duselbaer
Ja, das war's! Ich habe nicht bemerkt, dass CMAKE_FORCE_C_COMPILER tatsächlich anstelle von CMAKE_C_COMPILER war. Dies überschreibt den Compiler-Test, anstatt den -mmcu-Schalter zu verwenden, richtig? Vielen Dank! – Claudio