2016-07-20 10 views
-1

Ich bin in C mit CMake Codierung und ich würde sobre Präprozessor-Makros in einer separaten Datei definieren. Der Zweck ist, eine Hauptkonfigurationsdatei für meine Apps zu haben.Definieren Sie Präprozessor-Makros in einer .config-Datei

Ich war in etwas tun, ähnlich wie die Kernel.config-Dateien, aber ich habe nicht gefunden, wie Sie eine Datei mit Definitionen an den Compiler übergeben. Ich kenne die Option -D von gcc, um ein einzelnes Makro zu definieren, akzeptiert aber keine Dateien als Eingabe. Ich kenne auch das Dienstprogramm ADD_DEFINITIONS von CMake, aber die Verwendung, aber es wird auch erwartet, dass es mit einer bestimmten Anzahl von Makros verwendet wird, nicht mit einer Datei.

Summieren, würde Ich mag eine Datei .config mit Makrodefinitionen definieren:

CONFIG_MACRO_A=y 
CONFIG_MACRO_B=y 
# CONFIG_MACRO_C is not set 
CONFIG_MACRO_C=y 

Und jede Zeile als Präprozessormakro in der Kompilierung beschäftigen.

Vielen Dank für die Hilfe.

+2

können Sie 'config_file' verwenden. Überprüfen Sie http://stackoverflow.com/questions/38419876/cmake-generate-config-h-like-from-autoconf/38423317#38423317 und http://stackoverflow.com/questions/647892/cmake-how-to-check -header-files-and-library-Funktionen-like-in-autotools – usr1234567

Antwort

0

Ich sehe mindestens drei Möglichkeiten:

  1. Schreiben Sie Ihre Konfigurationsdatei im Stil eines normalen Header-Datei und schließen Sie sie, das heißt

    #define CONFIG_MACRO_A y 
    #define CONFIG_MACRO_B y 
    //#define CONFIG_MACRO_C# C is not set 
    #define CONFIG_MACRO_D y 
    
  2. Verwenden Sie die Konfigurationsdatei Mechanismus als @ usr1234567 vorgeschlagen.

  3. Verwenden Sie Shell-Verarbeitung in Ihrem Compiler-Aufruf (d. H. In der makefile), z. für bash:

    gcc $(CFLAGS) `while read mac; do echo -n "-D$mac "; done < <(grep -v "#" mymacro) ` $(TARGET) 
    
+0

Vielen Dank! Für meinen Anwendungsfall wird die dritte Option ausreichen. Der Hauptzweck war, die Konfigurationsdatei lesbar zu machen, so dass ich die Verwendung von #define oder #cmakedefine vermeiden wollte. –