Bir MSP430 mikro denetleyicisi için MSPGCC cross-compiler kullanan bir proje oluşturmak için CMake kullanmaya çalışıyorum. Başarıyla onunla herhangi basit bir program derlemek için, hedef işlemci belirten bir derleme bayrağı geçmek lazım yoksa böyle başarısız:Bir derleme bayrağını cmake ilk derleyici sınamasına nasıl geçirebilirim?
$ 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
Dolayısıyla, ben gayet iyi çalışıyor -mmcu
anahtarını kullanarak işlemci işaret eğer.
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})
CKağıt muhtemelen çünkü derleyici Ne oluyor bahis basit bir program, derlemek testinde başarısız yakınır: Zaten CMakeLists.txt dosyasında bu belirtirken ediyorum rağmen Sorun,-mmcu
anahtarı (bağlayıcı komut dosyası memory.x açmak için mümkün değil varlık hakkında mesajı not) kullanmayan:
$ 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!
Bilgin için aşağıdaki gibi benim araç zinciri dosyasıdır ve benim YOL değişkeni için izin veriyorsa 0'da derleyici ikili dosyalarını bulun: CKağıt derleyici testi taşımak için kullandığı hangi derleme bayrakları söyledi
# 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)
Tüm, herkes nasıl kontrol edileceğini söyleyebilir ve nasıl (örneğin, benzeri -mmcu
) özel bayraklar geçebilir yüzden kokan Başarısız mıyım?
MSPGCC4'ü kullanarak da işe yaramadı, ama şimdi MSPGCC'yi kullanıyorum, derleyici testi başarısız oluyor (MSPGCC4 durduruldu ve geliştirme orijinal projeye geri döndü). 'INCLUDE (CMakeForceCompiler)' maalesef hiçbir etkisi olmamıştır. – Claudio
Sadece iki satır CMAKE_FORCE_C_COMPILER (arm-elf-gcc GNU) CMAKE_FORCE_CXX_COMPILER (kol-elf-g ++ GNU) - aynı zamanda bunlara sahip değil mi? – duselbaer
Evet, öyleydi! CMAKE_FORCE_C_COMPILER aslında CMAKE_C_COMPILER yerine geldiğini fark etmedim. Bu, derleyici sınamasını -mmcu anahtarını kullanmak yerine geçersiz kılar, değil mi? Teşekkürler! – Claudio