Mischen von C- und Assembly-Quellen und Erstellen mit cmake

Lesezeit: 3 Minuten

Benutzer-Avatar
andyinno

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

Ich habe vor einiger Zeit cmake verwendet und 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 zum Ziel hinzufügen muss.

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

Das Problem ist, dass ich in Eclipse -x assembler-with-cpp habe

zur gcc-argumentliste hinzugefügt. Ich muss einen Weg finden, diesen Parameter nur für die asm-Dateien selektiv zur Standard-gcc-Argumentliste hinzuzufügen. Ich habe keine Möglichkeit gefunden, dies zu tun.

Vielen Dank im Voraus

LÖSUNG: Legen Sie in CMakeLists.txt jede Datei fest, die in derselben Liste kompiliert werden soll

enable_language(C ASM)

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

add_executable(program  ${SOURCES} ) 

In der Toolchain-Datei sollten Sie Folgendes platzieren:

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 übergeben

  • Können Sie genauer beschreiben, was das Problem beim Kompilieren der Assemblerquellen ist?

    – Mats Petersson

    28. Februar 2013 um 10:57 Uhr

  • Ich habe meinen Beitrag editiert. Bitte sehen Sie es für neue Details. Ich hoffe, sie reichen aus, um zu verstehen, was das Problem ist. Danke nochmal

    – andyinno

    28. Februar 2013 um 13:30 Uhr

  • Ich verstehe nicht. Sie möchten keine von Eclipse generierten Makefiles verwenden und sich über die von Eclipse geschriebenen Makefiles beschweren?

    – Vonbrand

    28. Februar 2013 um 20:14 Uhr

  • Ich möchte die automatisch generierten Makefiles von Eclipse nicht verwenden, da ich das Build-System in einer Jenkins-Umgebung auf dem Server platzieren muss. Das automatisch generierte Makefile hat einen fest codierten Pfad und ist nicht für die Verwendung in Jenkins geeignet. Die Alternativen, die ich gefunden habe, waren, mein eigenes Makefile zu schreiben oder so etwas wie cmake zu verwenden. cmake funktioniert perfekt für alles. Ich habe nur Probleme beim Kompilieren von asm-Dateien. Ich bin kein CMake-Guru, ich habe es in der Vergangenheit für einfache Projekte verwendet.

    – andyinno

    1. März 2013 um 8:14 Uhr


Benutzer-Avatar
Sakra

CMake unterstützt Assembler von Haus aus. Achten Sie nur darauf, die Sprache “ASM” in Ihrem zu aktivieren Projekt. Wenn eine Assembler-Quelldatei vorverarbeitet werden muss, legen Sie auch die Quelldatei fest Zusammenstellung Optionen:

project(assembler C ASM)
set_property(SOURCE foo.s APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp")
add_executable(hello foo.s bar.c)

  • Danke für Ihre Antwort. Dies funktioniert im Moment nicht … Ich habe das Problem, diese Datei zu kompilieren: github.com/metormote/hardware/blob/master/basestation_test/src/… Wenn ich das verwende, was Sie geschrieben haben, wird die Datei direkt von avr-as aufgerufen. Ich denke, ich muss die Datei mit avr-gcc aufrufen, damit sie die Datei vorverarbeiten kann.

    – andyinno

    28. Februar 2013 um 17:23 Uhr

  • Danke Sakra für deinen Kommentar. Ich habe Folgendes versucht: set ( ASM_SOURCES xmega/drivers/nvm/nvm_asm.s xmega/drivers/cpu/ccp.s ) set_source_files_properties(${ASM_SOURCES} PROPERTIES COMPILE_FLAGS “${CFLAGS} -x assembler-with-cpp”) add_executable( xMegaAnalog ${SOURCES} ${ASM_SOURCES}) besteht das Problem darin, dass es so aussieht, als würden die Dateien nicht kompiliert, sondern nur übersprungen. Ich sehe sie nicht mit make VERBOSE=1

    – andyinno

    1. März 2013 um 8:41 Uhr

  • Achten Sie darauf, die ASM-Sprache zu aktivieren, entweder durch Verwendung von project(assembler C ASM) oder enable_language(C ASM).

    – Sakra

    1. März 2013 um 9:02 Uhr

  • Dies ist oben auf CMakeLists.txt: Project (XmegaAnalog) project (Assembler C ASM) Ich habe versucht, die 2 in etwas wie Project (XmegaAnalog Assembler C ASM) zu verbinden, aber ohne Ergebnisse

    – andyinno

    1. März 2013 um 9:07 Uhr

  • versuchen Sie es mit enable_language(C ASM).

    – Sakra

    1. März 2013 um 12:01 Uhr

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

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

1382430cookie-checkMischen von C- und Assembly-Quellen und Erstellen mit cmake

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy