2013-02-28 7 views
10

Ich benutze Eclipse zum Erstellen eines avr-gcc-Projekts, das Assembly-Code und C-Quelldateien mischt. Ich möchte die automatische Makefile-Generierung von Eclipse loswerden, weil ich einige Prozesse in die Makefiles und aus anderen Gründen automatisieren muss.Mischen von C- und Assembly-Quellen und Erstellen mit cmake

Ich habe CMake vor einiger Zeit verwendet und ich war damit zufrieden, also möchte ich versuchen, meine Quelldateien damit zu kompilieren. Alles läuft wie erwartet mit C-Quellen. Das Problem ist, dass ich am Ende einige Assembly-Dateien (eigentlich 2) kompilieren und sie zum Ziel hinzufügen muss.

Ich googelte herum, aber ich habe keinen Weg gefunden, dies zu tun. hat jemand eine Idee, wie man das macht?

Das Problem ist, dass in Eclipse Ich habe -x Assembler-mit-CPP

zu gcc Argumente Liste hinzugefügt. Ich muss einen Weg finden, diesen Parameter nur für die asm-Dateien selektiv zur Standard-GCC-Argumentliste hinzuzufügen. Ich habe keinen Weg gefunden, dies zu tun.

danken Ihnen im Voraus

LÖSUNG: Satz in CMakeLists.txt jede Datei in der gleichen Liste legen Sie sollten

enable_language(C ASM) 

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

add_executable(program ${SOURCES}) 

in der Toolchain-Datei zu kompilieren:

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

Die zweite Zeile ist nur, wenn Sie beim Kompilieren von asm-Dateien zusätzliche Optionen übergeben müssen. Ich wollte alle CFLAGS plus einige ASM_OPTIONS

+1

Können Sie beschreiben, genauer Was ist das Problem bei der Zusammenstellung der Assembler-Quellen? –

+0

Ich habe meinen Beitrag bearbeitet. Bitte sehen Sie es für neue Details. Ich hoffe, sie haben ein gutes Verständnis dafür, was das Problem ist. danke nochmal – andyinno

+0

ich verstehe nicht. Sie möchten Eclipse-generierte Makefiles nicht verwenden und sich über die Makefile-Eclipse-Schreibvorgänge beschweren? – vonbrand

Antwort

11

übergeben. CMake 2.8 sollte Assembler aus der Box unterstützen. Stellen Sie sicher, dass Sie die Sprache "ASM" in Ihrem Projekt aktivieren. Wenn ein Assembler-Quelldatei Vorverarbeitung benötigt, stellen auch die Kompilation Flagge der Quelldatei:

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

Vielen Dank für Ihre Antwort. Das funktioniert momentan nicht ... Ich habe das Problem, diese Datei zu kompilieren: https://github.com/metormote/hardware/blob/master/basestation_test/src/asf/xmega/drivers/cpu/ccp.s Wenn ich das benutze, was Sie geschrieben haben, wird die Datei direkt von avr-as aufgerufen. Ich denke, dass ich die Datei mit avr-gcc aufrufen muss, damit sie die Datei vorverarbeitet. – andyinno

+0

Siehe aktualisierte Antwort. – sakra

+0

Danke sakra für Ihren Kommentar. Ich habe folgendes versucht: set (ASM_SOURCES \t xmega/drivers/nvm/nvm_asm.s \t xmega/drivers/cpu/ccp.s ) set_source_files_properties ($ {ASM_SOURCES} EIGENSCHAFTEN COMPILE_FLAGS "$ {CFLAGS} -x Assembler-mit-cpp") add_executable (xMegaAnalog $ {SOURCES} $ {ASM_SOURCES}) Das Problem ist, dass es aussieht, als wären die Dateien nicht kompiliert aber einfach übersprungen. Ich sehe sie nicht mit make VERBOSE = 1 – andyinno

2

Basierend auf Ihrer Lösung, eine der einfachsten Lösungen ist diese Einzeiler:

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