2013-02-13 154 views
6

我有一個簡單的makefile,它將C++編譯器調用爲$(CXX),它在我的~/.profile腳本中設置。 Netbeans似乎有一個複雜的工具鏈管理器,但無論如何,它似乎只是將$CXX解決爲c++C++ makefile的Netbeans環境變量

如何正確設置$CXX,或者Netbeans設置了另一個由makefile檢測到的變量? (yuck)

編輯:右鍵單擊導航器中的makefile可以指定一個環境,但似乎只有一行輸入的空間。指定CXX=/usr/local/bin/g++解決了這個問題,但這遠非最佳。

+0

你可以指定每個文件的編譯選項,所以如果你右鍵點擊一個文件,你可以指定它爲'c'文件或'C++'文件...要選擇一個編譯器,你需要創建一個'toolkit' 。 – Mikhail 2013-02-13 03:54:10

+0

@Mikhail這是一個自定義的生成文件,因此Netbeans不能對每個文件執行任何操作。 – Potatoswatter 2013-02-13 03:57:13

+0

也許你可以改變你的makefile?你也可以自定義調用makefile,但我認爲你只需要選擇正確的'toolset'。 – Mikhail 2013-02-13 04:08:21

回答

3

我只會描述我在NetBeans中使用C++時通常會做的事情。首先,對每一個項目我創建了一個簡單的makefile這樣的:

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> 

環境變量MAKELIBHOME被設置在NetBeans外部。目錄$ {} MAKELIBHOME包含了一些包括對make文件,例如文件MINGW32.inc看起來是這樣的:

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 $< 

這些inc檔案,對於所有的NetBeans項目中的相同。這裏沒有絕對路徑,因此make會使用PATH變量來定位GCC工具集,但是當然你可以使用絕對路徑來選擇你喜歡的工具集(或者包含一個不同的inc文件 - 我更喜歡這種方式)。

所有這些工作都在我的Windows機器上,但Linux配置看起來非常相似 - 我只需要在我的所有主makefiles中包含另一組inc文件。另外,這個設置允許我從命令行調用make。

我希望它能幫助, 〜AY

+0

嗯,我在發佈它時錯過了這個。我不再使用NetBeans,但我的問題是「環境變量MAKELIBHOME'設置在NetBeans之外。」 *您是如何使NetBeans可見的外部環境變量?雖然,因爲我在Unix/OS X上,它可能無法翻譯。 – Potatoswatter 2014-08-07 03:21:54

+0

@Patatoswatter - '''可以引用Windows和Unix中的環境變量,它發生在NetBeans之外。順便說一句,我總是使用NetBeans項目類型「C/C++項目與現有源」,所以我的'Makefile'完全在我的控制下 – HEKTO 2014-08-07 13:53:24

+0

嗯,正如問題所述,我的'.profile'確實設置了'$ CXX',變量不可用於makefile。調用'make'的程序負責創建環境,儘管默認情況下變量是傳播的。 – Potatoswatter 2014-08-08 08:32:24

2

這是一個老帖子。然而,最近我發現了同樣的問題,我發現了一個基於@ HEKTO答案的替代方案。

我使用PETSc,一個庫來解決大型稀疏矩陣系統。他們構建系統,您需要使用您的makefile取決於兩個環境變量的「有」:PETSC_DIR和PETSC_ARCH必須在您的環境中設置....或者你可以將它們作爲選項,你的make命令!這就是我所做的。

我把通過NetBeans的產生和makefile在最後我說我有:

include ${PETSC_DIR}/conf/variables 

注意如何取決於PETSC_DIR的定義。另外這個包括大量使用這個和PETSC_ARCH遍地。工具 - >選項:在「項目選項」選項卡中,填寫「生成選項」的文本框爲:PETSC_DIR =/path /到/ PETSc的PETSC_ARCH =一些拱

而且,現在你可以開始使用你的項目選項中的這些環境變量(和其他人在$ {PETSC_DIR}定義/ conf目錄/變量。例如,對於我的包含文件(右鍵單擊項目,然後單擊「屬性」): 在「C編譯器」,「包含目錄」下,我放入:$ {PETSC_DIR}/include

並且在「Linker」 ,我把「庫」放在$ {PETSC_LIB}(在上面的include文件中定義)。

現在我可以在NetBeans中構建並運行我的項目。如果我的PETSc版本發生變化,我只需要改變傳遞給變量的變量的定義,其他所有變量都得到解決。

我希望這可能有助於某人。它絕對爲我工作。最好的部分是我可以將代碼提供給其他人,他們可以像平常一樣使用「make」(不使用NetBeans)從命令行進行編譯,並定義上述環境變量。編譯現在沒有任何硬編碼路徑。

1

我在Linux上有一個非常類似的問題,其中Netbeans沒有從bash中獲取環境變量。

解決方法:從bash啓動netbeans。

我不確定Mac上的等價物是什麼,但想法很簡單:從已經設置了正確環境變量的終端啓動Netbeans。