2013-02-13 13 views
6

私は、~/.profileスクリプトで設定された$(CXX)というC++コンパイラを呼び出す単純なメークファイルを持っています。 Netbeansは洗練されたツールチェーンマネージャーを持っているようですが、それでもとして$CXXを解決するようです。C++メイクファイルのためのNetbeans環境変数

$CXXを正しく設定するにはどうしたらいいですか、またはメイクファイルで検出できる別の変数がNetbeansによって設定されていますか? (yuck)

編集:ナビゲータでメイクファイルを右クリックすると環境を指定できますが、1行の入力に余裕があるようです。 CXX=/usr/local/bin/g++を指定すると問題は解決しますが、これは最適ではありません。

+0

ファイルごとにコンパイルオプションを指定できるので、ファイルを右クリックすると、 'c'ファイルまたは' C++'ファイルとして指定できます。コンパイラを選択するには 'toolkit'を作成する必要があります。 – Mikhail

+0

@Mikhailこれはカスタムメイクファイルなので、Netbeansはファイルごとに何もできません。 – Potatoswatter

+0

メイクファイルを変更することはできますか?また、makefileへのカスタム呼び出しも行いますが、適切な 'toolset'を選択するだけでよいと思います。 – Mikhail

答えて

3

NetBeansでC++を使用しているときに私が通常行うことについて説明します。

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は} の数が含まれているメイク用のファイルが含まれ、例えば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の設定は非常によく似ています。私はすべてのメインのmakefileにincファイルの別のセットを含める必要があります。また、この設定では、コマンドラインからmakeを呼び出すことができます。私はそれが役に立てば幸い

、 〜AY

+0

うわー、投稿したときにこれを忘れてしまった。私はもうNetBeansを使用しませんが、私の質問は "環境変数' MAKELIBHOME'はNetBeansの外で設定されています。 " * NetBeansで外部環境変数をどのように見えるようにしましたか?私はUnix/OS X上にいるので、翻訳していないかもしれませんが。 – Potatoswatter

+0

@Potatoswatter - 'make'はWindowsとUnixの両方の環境変数を参照することができ、NetBeansの外部で実行されます。ところで、私はいつもNetBeansプロジェクトタイプ "C/C++ Project with Existing Sources"を使用していますので、 'Makefile'は完全に私の管理下にあります。 – HEKTO

+0

質問の状態として、私の' .profile'は '$ CXX'を設定しました。変数はメイクファイルで使用できませんでした。 'make 'を呼び出すプログラムは、環境を作る責任がありますが、変数はデフォルトで伝播します。 – Potatoswatter

2

これは古い記事です。しかし、私は最近同じ問題を発見し、@ HEKTOの答えに基づく代替案を見つけました。

私は大規模な疎マトリックスシステムを解決するためのライブラリであるPETScを使用します。彼らのビルドシステムでは、あなたの環境に設定されなければならないPETSC_DIRとPETSC_ARCHという2つの環境変数に依存するmakefileに "include"を使用する必要があります。あるいはmakeコマンドのオプションとしてそれらを渡すことができます!!これは私がやったことです。

私は、NetBeansによって生成されたメイクファイルを取って、一番最後に私は私には、コメントを追加しました:これはPETSC_DIRの定義にどのように依存するか

include ${PETSC_DIR}/conf/variables 

お知らせ。加えて、これは大量にPETSC_ARCHとその場所全体を使用します。 ツール - >オプション: "プロジェクトオプション"タブで、 "Make Options"のテキストボックスに次のように記入します:PETSC_DIR =/path/to/petsc PETSC_ARCH = some-arch

また、これらの環境変数(およびプロジェクトオプション内の$ {PETSC_DIR}/conf/variablesで定義されている他の環境変数)を使用することもできます。 "Cコンパイラ"、 "インクルードディレクトリ"の下に$ {PETSC_DIR}/includeを入れます。

そして "リンカ"の下には、 、 "Libraries" $ {PETSC_LIB}(上記のインクルードファイルで定義されています)。

これで、NetBeans内からプロジェクトを構築して実行できます。私のPETScのバージョンが変更された場合、makeに渡される変数の定義を変更するだけで、他のものは解決されます。

私はこれが誰かを助けてくれることを願っています。それは間違いなく私のために働いた。また、私は自分のコードを他の人に与えることができ、いつものように "make"(NetBeansなし)を使ってコマンドラインからコンパイルし、上記の環境変数を定義することができます。コンパイルにはハードコーディングされたパスがありません。

1

Netbeansがbashから環境変数を取得しなかったLinuxで、私は非常によく似た問題を抱えていました。

解決策:bashからnetbeansを開始します。

私は同等のものがMac上ではわかりませんが、アイデアは単純です:適切な環境変数が設定されている端末からNetbeansを起動します。