Tôi đang cố gắng sử dụng CMake để xây dựng một dự án sử dụng MSPGCC cross-compiler cho bộ vi điều khiển MSP430. Để biên dịch thành công bất kỳ chương trình đơn giản với nó, chúng ta cần phải vượt qua một lá cờ biên dịch cho thấy mục tiêu xử lý, nếu không nó không thành công như thế này:Làm thế nào để vượt qua một cờ biên dịch để thử nghiệm trình biên dịch ban đầu 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
Do đó, nếu tôi chỉ ra bộ vi xử lý sử dụng -mmcu
chuyển đổi nó hoạt động tốt. Vấn đề là, mặc dù tôi đã xác định này trong CMakeLists.txt tập tin của tôi:
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 phàn nàn trình biên dịch thất bại trong các thử nghiệm để biên dịch một chương trình đơn giản, mà tôi đặt cược đang xảy ra bởi vì nó có lẽ là không sử dụng các -mmcu
switch (lưu ý thông điệp về việc không thể để mở mối liên kết tập tin kịch bản 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!
Chỉ cần cho các hồ sơ, tập tin toolchain của tôi là như sau, và biến PATH của tôi cho phép nó tìm các tệp nhị phân của trình biên dịch ở /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)
Tất cả những gì đã nói, bất cứ ai có thể cho tôi biết làm thế nào để kiểm tra mà lập cờ CMake được sử dụng để thực hiện các bài kiểm tra trình biên dịch, và làm thế nào chúng ta có thể vượt qua những lá cờ tùy chỉnh (như -mmcu
, ví dụ) để nó doesn' t thất bại?
khi tôi w như sử dụng MSPGCC4 nó đã làm việc ra tốt quá, nhưng bây giờ mà tôi đang sử dụng MSPGCC mới hơn đó là thất bại trong việc kiểm tra trình biên dịch (MSPGCC4 đã ngưng và phát triển quay trở lại dự án ban đầu). Các 'INCLUDE (CMakeForceCompiler)' tiếc là không có hiệu lực. – Claudio
Nó không chỉ bao gồm nó cũng là hai dòng CMAKE_FORCE_C_COMPILER (GNU-gelf-gcc) CMAKE_FORCE_CXX_COMPILER (GNU-gelf-g ++ GNU) - bạn cũng có chúng? – duselbaer
Vâng, đó là nó! Tôi đã không nhận thấy CMAKE_FORCE_C_COMPILER đã thực sự ở vị trí của CMAKE_C_COMPILER. Điều này không ghi đè lên kiểm tra trình biên dịch thay vì làm cho nó sử dụng chuyển đổi -mmcu, phải không? Cảm ơn! – Claudio