2009-12-11 12 views
6

Używam zmiennej SKELETON_JAR w moim kodzie C++ w jednym nagłówku. Jednak chcę pozwolić użytkownikowi na łatwe zdefiniowanie miejsca słoika w czasie kompilacji. Myślę, że najłatwiej jest to zrobić, aby umieścić to w makefile?Zmienna preprocessor C++

#define SKELETON_JAR "./Util.jar" 
+0

Jakie jest Twoje środowisko kompilacji? Twój system operacyjny? –

Odpowiedz

8

W kodzie:

#ifndef SKELETON_JAR 
    #define SKELETON_JAR "./Util.jar" // default path 
#endif 

, a następnie w pliku Makefile użyj CPPFLAGS:=-DSKELETON_JAR="./Util.jar".

Oczywiście musisz upewnić się, że CPPFLAGS są przekazywane do kompilatora w ramach reguły kompilacji, co ma miejsce w przypadku korzystania z domyślnych reguł niejawnych.

From GNU Make documentation:

Kompilowanie programów C

nie odbywa się automatycznie z NC poleceniem formularza `$ (CC) -c $ (CPPFLAGS) $ (CFLAGS)”

+0

Przydatna kompilacja warunkowa, choć nie zaryzykowałabym żadnych założeń co do natury pliku make pliku OP. Ważną częścią jest tylko przełącznik linii poleceń -D. – Clifford

+0

dzięki chłopaki, obie odpowiedzi są wspaniałe –

+2

Jako alternatywę do zdefiniowania domyślnej ścieżki można też zrobić coś takiego: #ifndef SKELETON_JAR #Error „SKELETON_JAR nie zostało zdefiniowane” #endif ten sposób będziesz łatwo wychwycić wszystkie przypadki, w których nie zostały zdefiniowane w pliku Makefile – Glen

6

W zależności od Twojego kompilatora, normalnym sposobem na to jest użycie flagi -D kompilatora w pliku makefile. Na przykład:

MYFLAGS = -DSKELETON_JAR = "foo"

potem na:

gcc $ (MYFLAGS) $ (OTHER_STUFF)

+0

Do downvoter - która część tej odpowiedzi jest niepoprawna? –

+0

Zastanawiałam się nad tym samym –

+0

Niektórzy ludzie po prostu lubią głosować w dół. Być może po prostu opisałbym opcję GCC zamiast tworzyć możliwie mylące założenia dotyczące pliku make programu operacyjnego. – Clifford

0

Używaj flag kompilacji dla tej samej i definiuj flagę w Makefile.