2013-02-13 12 views
6

Ho un semplice makefile che chiama il compilatore C++ come $(CXX), che è impostato nel mio script ~/.profile. Netbeans sembra avere un sofisticato gestore di toolchain, eppure sembra risolvere $CXX come solo c++ non importa quale.Variabili di ambiente Netbeans per il makefile C++

Come posso impostare $CXX correttamente, o c'è un'altra variabile fissato dal Netbeans che il mio makefile in grado di rilevare? (yuck)

Modifica: facendo clic con il pulsante destro del mouse sul makefile nel navigatore, è possibile specificare un ambiente, anche se sembra esserci solo spazio per una riga di input. La specifica di CXX=/usr/local/bin/g++ risolve il problema, ma non è affatto ottimale.

+0

È possibile specificare per file compilazione opzioni, quindi se si fa clic destro su un file è possibile specificare come file 'C' o un' C++ file '... Per scegliere un compilatore è necessario effettuare un' toolkit' . – Mikhail

+0

@Mikhail Questo è un makefile personalizzato, quindi Netbeans non può fare nulla per file. – Potatoswatter

+0

Forse potresti cambiare il tuo makefile? Inoltre fai una invocazione personalizzata al makefile, ma penso che devi solo scegliere il 'toolset' giusto. – Mikhail

risposta

3

Descriverò solo ciò che faccio di solito quando lavoro con C++ in NetBeans. In un primo momento, per ogni progetto creo un semplice makefile come questo:

MAIN = <my main target> 
CFLAGS = -g -std=c++0x 

include ${MAKELIBHOME}/MINGW32.inc 
include ${MAKELIBHOME}/WINDOWS.inc 

build: ${MAIN} 

clean:; rm -fr <files to remove> 

L'ambiente MAKELIBHOME variabile è impostata al di fuori di NetBeans. La directory $ {} MAKELIBHOME contiene una serie di file include per la marca, ad esempio il file MINGW32.inc assomiglia a questo:

CC = g++ 

CFLAGS += -W -DLITTLE_ENDIAN=1 
LDLIBS += -lws2_32 

.SUFFIXES: .o .c .cpp 

.c:  ;${CC} ${CFLAGS} ${LDFLAGS} $< -o latest ${LDLIBS} 
.cpp: ;${CC} ${CFLAGS} ${LDFLAGS} $< -o latest ${LDLIBS} 

.c.o: ;${CC} ${CFLAGS} -c $< 
.cpp.o: ;${CC} ${CFLAGS} -c $< 

Questi Inc-file sono gli stessi per tutti i progetti NetBeans. Non ci sono percorsi assoluti qui, quindi il make utilizzerà la variabile PATH per individuare un set di strumenti GCC, ma ovviamente puoi usare i percorsi assoluti per scegliere il set di strumenti che ti piace (o includere un diverso file inc - Preferirei in questo modo).

Tutto questo funziona sulla mia macchina Windows, ma la configurazione di Linux sembra molto simile - ho solo bisogno di includere un altro set di file inc a tutti i miei makefile principali. Inoltre, questa configurazione mi consente di chiamare la marca dalla riga di comando.

Spero che aiuta, ~ AY

+0

Hmm, ho perso questo quando si postato . Non uso più NetBeans, ma la mia domanda è su "La variabile di ambiente' MAKELIBHOME' è impostata all'esterno di NetBeans. " * Come * hai reso visibile una variabile di ambiente esterna a NetBeans? Anche se, dato che sono su Unix/OS X, potrebbe non tradursi. – Potatoswatter

+0

@Potatoswatter - il 'make' può riferirsi alle variabili di ambiente sia in Windows che in Unix, e succede al di fuori di NetBeans. A proposito, io uso sempre il tipo di progetto NetBeans "Progetto C/C++ con sorgenti esistenti", quindi il mio 'Makefile' è totalmente sotto il mio controllo – HEKTO

+0

Bene, come dice la domanda, il mio' .profile' ha impostato '$ CXX' ma il variabile non era disponibile per il makefile. Il programma che invoca 'make' è responsabile della creazione dell'ambiente, sebbene sia vero che le variabili si propagano di default. – Potatoswatter

2

Questo è un vecchio post. Tuttavia ho trovato lo stesso problema di recente e ho trovato un'alternativa basata sulla risposta di @ HEKTO.

Uso PETSc, una libreria per la risoluzione di sistemi a matrice sparsa di grandi dimensioni. Il loro sistema di compilazione richiede l'utilizzo di un "include" nel makefile che dipende da due variabili di ambiente: PETSC_DIR e PETSC_ARCH che devono essere impostate nel proprio ambiente .... oppure è possibile passarle come opzioni al comando make !! questo è quello che ho fatto.

ho preso il makefile generato da NetBeans e proprio alla fine ho aggiunto la mia includono:

include ${PETSC_DIR}/conf/variables 

Notate come questo dipende dalla definizione di PETSC_DIR. Inoltre, questo include in modo massiccio questo e PETSC_ARCH dappertutto.

Quindi, in NetBeans ora lo configuro per passare queste variabili per rendere: Strumenti-> Opzioni: Nella scheda "Opzioni progetto" riempio la casella di testo per "Opzioni di creazione" come: PETSC_DIR =/percorso/a/petsc PETSC_ARCH = some-arco

Inoltre, ora è possibile iniziare a utilizzare queste variabili di ambiente (e altri definiti in $ {} PETSC_DIR/conf/variabili all'interno delle vostre opzioni di progetto.Ad esempio, per i miei file di inclusione (fare clic con il tasto destro del mouse su progetto, quindi su "Proprietà"): Sotto "C Compiler", "Includi directory" Ho inserito: $ {PETSC_DIR}/include

E in "Linker" , "Librerie" Inserisco: $ {PETSC_LIB} (definito nel file include sopra).

Ora posso creare ed eseguire il mio progetto da dentro NetBeans. Se la mia versione PETSc cambia, ho solo bisogno di cambiare la definizione delle variabili passate a fare e tutto il resto viene risolto.

Spero che questo possa aiutare qualcuno. Ha sicuramente funzionato per me. E la parte bella è che posso dare il mio codice ad altre persone e che possono compilare dalla riga di comando usando "make" come al solito (senza NetBeans) e definendo le suddette variabili d'ambiente. La compilation ora non ha percorsi hard codificati.

1

Ho avuto un problema molto simile su linux, dove Netbeans non afferrare le variabili di ambiente da bash.

La soluzione: iniziare NetBeans da bash.

io non sono sicuro di quello che l'equivalente è su Mac, ma l'idea è semplice: iniziare Netbeans da un terminale che ha le variabili d'ambiente giusti già impostati.

Problemi correlati