2013-02-28 26 views
10

Tôi đang sử dụng nhật thực để xây dựng dự án avr-gcc trộn mã lắp ráp và tệp nguồn C. Tôi muốn loại bỏ thế hệ makefile tự động của nhật thực vì tôi cần tự động hóa một số quy trình vào makefiles và vì các lý do khác.Trộn nguồn C và lắp ráp và xây dựng với cmake

Tôi đã sử dụng cmake vài lần trước và tôi đã hài lòng với nó vì vậy tôi muốn cố gắng biên dịch các tệp nguồn của mình bằng cách sử dụng nó. Mọi thứ đều chạy như mong đợi với các nguồn C. Vấn đề là ở phần cuối, tôi cần biên dịch một số tập tin lắp ráp (thực sự là 2) và thêm chúng vào mục tiêu.

Tôi googled xung quanh nhưng tôi đã không tìm thấy một cách để làm điều này. ai đó có ý tưởng về cách thực hiện việc này?

Vấn đề là trong eclipse Tôi có -x lắp ráp-với-cpp

bổ sung vào danh sách đối số gcc. Tôi cần phải tìm một cách để chọn lọc thêm param này vào danh sách đối số gcc tiêu chuẩn chỉ cho các tập tin asm. Tôi không tìm thấy cách nào để làm điều này.

cảm ơn bạn trước

SOLUTION: bộ trong CMakeLists.txt mỗi tập tin để biên dịch trong cùng một danh sách

enable_language(C ASM) 

set (SOURCES 
    foo.c 
    bar.c 
    foobar.s 
) 

add_executable(program ${SOURCES}) 

trong file toolchain bạn nên đặt:

SET(ASM_OPTIONS "-x assembler-with-cpp") 
SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}") 

dòng thứ hai chỉ là nếu bạn cần chuyển các tùy chọn bổ sung trong khi biên dịch các tệp asm. Tôi muốn vượt qua tất cả CFLAGS cộng với một số ASM_OPTIONS

+1

bạn có thể miêu tả chính xác hơn vấn đề là gì với việc biên dịch các nguồn lắp ráp? –

+0

Tôi đã chỉnh sửa bài đăng của mình. xin vui lòng xem nó để biết chi tiết mới. Tôi hy vọng họ là khó khăn để hiểu vấn đề là gì. cảm ơn bạn lần nữa – andyinno

+0

Tôi không hiểu. Bạn không muốn sử dụng các tệp makefiles do Eclipse tạo ra, và phàn nàn về Eclipse viết của Makefile? – vonbrand

Trả lời

11

CMake 2.8 nên hỗ trợ trình lắp ráp ra khỏi hộp. Chỉ cần đảm bảo bật ngôn ngữ "ASM" trong dự án của bạn. Nếu một tập tin nguồn lắp ráp cần tiền xử lý, cũng thiết lập các nguồn tập tin của biên soạn cờ:

project(assembler C ASM) 
set_source_files_properties(foo.s PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp") 
add_executable(hello foo.s bar.c) 
+0

Cảm ơn bạn đã trả lời. Điều này không hoạt động vào lúc này ... Tôi gặp sự cố khi biên soạn tệp này: https://github.com/metormote/hardware/blob/master/basestation_test/src/asf/xmega/drivers/cpu/ccp.s Nếu tôi sử dụng những gì bạn đã viết tập tin được gọi trực tiếp bởi avr-as. Tôi nghĩ rằng tôi cần phải gọi tập tin bằng cách sử dụng avr-gcc cho nó tiền xử lý các tập tin. – andyinno

+0

Xem câu trả lời cập nhật. – sakra

+0

Cảm ơn bạn sakra cho bình luận của bạn. Tôi đã thử cách này: đặt (ASM_SOURCES \t xmega/drivers/nvm/nvm_asm.s \t xmega/drivers/cpu/ccp.s ) set_source_files_properties ($ {ASM_SOURCES} TÍNH NĂNG COMPILE_FLAGS "$ {CFLAGS} -x assembler-with-cpp") add_executable (xMegaAnalog $ {SOURCES} $ {ASM_SOURCES}) vấn đề là có vẻ như các tập tin sẽ không biên soạn nhưng chỉ bỏ qua. Tôi không thấy chúng bằng cách sử dụng VERBOSE = 1 – andyinno

2

Dựa trên giải pháp của bạn, một trong những giải pháp đơn giản nhất là một-liner:

SET(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp") 
Các vấn đề liên quan