2009-12-11 13 views
6

Sto usando la variabile SKELETON_JAR sul mio codice C++ in un'intestazione. Tuttavia, voglio consentire all'utente di definire facilmente la posizione del barattolo nel tempo di compilazione. Penso che il modo più semplice per farlo sia mettere questa definizione in makefile è così?Variabile preprocessore C++

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

Qual è il tuo ambiente di costruzione? Il tuo sistema operativo? –

risposta

8

Nel codice:

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

e quindi nel makefile utilizzare CPPFLAGS:=-DSKELETON_JAR="./Util.jar".

Ovviamente è necessario assicurarsi che il CPPFLAGS sia passato al compilatore come parte della regola di compilazione, nel caso in cui si stiano utilizzando le regole implicite di default.

From GNU Make documentation:

Compilare programmi C

non è fatta automaticamente da NC con un comando nella forma `$ (CC) -c $ (CPPFLAGS) $ (CFLAGS)'

+0

Un po 'utile di compilazione condizionale, anche se non avrei rischiato di fare ipotesi sulla natura del makefile dell'OP. La parte importante è solo l'opzione della riga di comando -D. – Clifford

+0

Grazie ragazzi, entrambe le risposte sono meravigliosi –

+2

Come alternativa alla definizione di un percorso predefinito si potrebbe anche fare qualcosa di simile: #ifndef SKELETON_JAR #error "SKELETON_JAR non è stato definito" #endif In questo modo sarete cattura facilmente i casi in cui non è stato definito in un Makefile – Glen

6

A seconda del compilatore, il modo normale per farlo consiste nell'utilizzare il flag -d del compilatore nel makefile. Per esempio:

MYFLAGS = -DSKELETON_JAR = "foo"

poi in seguito:

gcc $ (MYFLAGS) $ (OTHER_STUFF)

+0

Per il down-voter - quale bit di questa risposta è errato? –

+0

Mi stavo chiedendo la stessa cosa –

+0

Alcune persone mi piace giù per votare credo. Probabilmente avrei semplicemente descritto l'opzione -D = piuttosto che fare ipotesi potenzialmente confuse sul makefile dell'OP. – Clifford

0

Utilizzare flag di compilazione per lo stesso flag e definire in Makefile.

Problemi correlati