2012-10-22 28 views
8

मैं एक परियोजना है जो एक MSP430 माइक्रोकंट्रोलर के लिए MSPGCC cross-compiler का उपयोग करता है के निर्माण के लिए CMake उपयोग करने के लिए कोशिश कर रहा हूँ। इसे सफलतापूर्वक के साथ किसी भी साधारण प्रोग्राम को संकलित करने के लिए, हम एक संकलन ध्वज लक्ष्य प्रोसेसर का संकेत पारित करने के लिए की जरूरत है, वरना यह इस तरह विफल रहता है:कैसे प्रारंभिक संकलक परीक्षण CMake के लिए एक संकलन ध्वज पारित करने के लिए?

$ 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! 

बस रिकार्ड के लिए, मेरी toolchain फ़ाइल इस प्रकार है, और मेरे पथ चर करने के लिए यह अनुमति देता है 0 पर कंपाइलर बाइनरी पाएं:

# 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, उदाहरण के लिए) तो यह 'नहीं करता है टी असफल हो?

उत्तर

6

डॉक्स के अनुसार:

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 के लिए उपयोग करना भी

+0

जब मैं w MSPGCC4 का उपयोग कर के रूप में इस पर काम किया भी ठीक है, लेकिन अब मैं नए MSPGCC यह संकलक परीक्षण में विफल रहा है (MSPGCC4 बंद किया गया था और विकास वापस मूल परियोजना में बदल गया) का उपयोग कर रहा है। 'INCLUDE (CMakeForceCompiler)' दुर्भाग्य से कोई प्रभाव नहीं पड़ा। – Claudio

+2

यह सिर्फ नहीं शामिल है यह भी है दो पंक्तियों CMAKE_FORCE_C_COMPILER (हाथ-योगिनी-जीसीसी जीएनयू) CMAKE_FORCE_CXX_COMPILER (हाथ-योगिनी-जी ++ जीएनयू) - आप भी उन्हें नहीं है? – duselbaer

+0

हाँ, वह था! मैंने ध्यान नहीं दिया कि CMAKE_FORCE_C_COMPILER वास्तव में CMAKE_C_COMPILER के स्थान पर था। यह -एमएमसीयू स्विच का उपयोग करने के बजाय कंपाइलर परीक्षण को ओवरराइड करता है, है ना? धन्यवाद! – Claudio