2012-10-22 15 views
8

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?

cevap

6

Dokümanlar göre:

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

Eğer CMakeForceCompiler şeyi kullanmalısınız

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) 

benim MSP430 için buradan memnunum kullanma

(dokümanlardan & kopyalayıp yapıştırarak) ben ne zaman ben de

+0

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

+2

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

+0

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

İlgili konular