2011-02-05 10 views
4

g ++とautomakeを使用して、Ubuntu 10.10でC++アプリケーションを開発しています。このプログラムでは、2つのcppファイル(main.cppとforward.cpp、後者はテストクラス)とforward.hを持っています。私は同じディレクトリにすべてのものを4つのファイルをコピーして呼び出すとEclipseでC++プロジェクトのmakeを実行する

main: \ 
forward.o 
    g++ -fPIC -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ -L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt \ 
    -o simple_controller \ 
    main.cpp \ 
    forward.o 

%.o : %.cpp 
    g++ -c -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ $< -o [email protected] 

clean: 
    rm -fv *.o 
    rm -fv */*.o 

「作る」コマンドライン(bashの)その後、G ++と呼ばれ、私のプログラムが正しくコンパイルされますから。私はまた、次のメイクファイルを持っています。

これで、私はEclipseで同じことを達成したかったのです。そこで私は自分のmakefileを提供できるように、Eclipseの下に新しいアンマネージC++プロジェクトを作成しました(上記のものと同じです)。残念ながら、私は今、私は次のコンソール出力を参照することができますEclipseの下のオプション「すべてを構築」を使用する場合:私はLinuxでC++開発に新しいですので、g ++およびmakefileを使用して、私は本当に理解していない

make 
make: *** No rule to make target `forward.o', needed by `main'. Stop. 

を問題。アプリケーションを正しくコンパイルするために必要なことは、コマンドラインから完全に動作するので、makefileに書かれていると思いました。しかし、それは私のEclipseプロジェクトに同じメイクファイル1:1をコピーすることはできないようです。

私はここで何が不足していますか?
ご協力いただきありがとうございます!

答えて

1

プロジェクトのビルドを実行すると、eclipseはmake allコマンドを実行しているため、ターゲットEclipse用にallではなくmainを使用するようにプロジェクトを変更するか、すべてのルールをmakefileに追加する必要があります。参照はメインルールにバックアップされます。また、クリーンステップの下に実行可能ファイルも削除するコマンドを追加します。 Makefileの修正

main: \ 
    forward.o 
    g++ -fPIC -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ -  L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt \ 
    -o simple_controller \ 
    main.cpp \ 
    forward.o 

%.o : %.cpp 
    g++ -c -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ $< -o [email protected] 

clean: 
    rm -fv *.o 
    rm -fv */*.o 
    rm -fv simple_controller 

all: main 
+0

残念ながら、デフォルトでは "all"をターゲットとして使用するので、プロジェクトプロパティ - > C/C++ビルド - >タブ "ビヘイビア"、入力ボックス "ビルド(インクリメンタルビルド)"から "all"を削除しました。もう一度ここに「all」と入力して、提案に従ってメイクファイルを変更すると、元の投稿と同じエラーが表示されます(今回は最初の行に「make all」と表示されます)。 – Matthias

+0

@Matthias:何がうまくいかないその後、次のようにして私のfedora 14システム(私は現時点でUbuntu VMを持っていません)でテストしました:1)新しい空のプロジェクトを作成します。 2)提供したMakefileをコピーしてMakefileを作成します(ターゲットではない各行がタブで始まるように再フォーマットします)。3)単純なmain.cppファイルとforward.cppファイルを作成します。 4)/ usr/local/Aria/*への参照を私のテストに関連しないものとして削除する。 5)プロジェクトをC++ Makefileプロジェクトに変換しました。 6)すべてのターゲットを追加しました。7)ビルドを行いました。 – diverscuba23

1

[OK]を、私は今、問題を発見した - Eclipseは、すべてのソースコードファイルが置かれている「SRC」フォルダとは別のディレクトリにMakefileを入れています。だからmakeはコンパイルに必要な.cppと.hファイルを見つけられませんでした。今、私はこのようなもので終わった:

... 
forward.o : ../src/forward.cpp ../src/forward.h 
... 

、それはまた、明示的に述べられていない../srcさえフォルダになりますことを確認伝えるためにどのような方法がありますか?

0

ディレクトリに変更するには、-Cオプションを使用します。例えば

あなたのソースがSRCである/そして、あなたのメイクファイルは、srcの親ディレクトリである/あなたは、単に行うことができた場合:

make -C .. 

注 - 特にEclipseを使用していないが、通常追加する方法があるんコマンドラインは、IDEオプションのどこかのビルドコマンドにオプション&を切り替えます。私はすでにそのEclipseを見出したように、助けにはならなかった

(あなたは問題が別のフォルダに、あなたの源であるメイクファイルであることを指定するあなたの質問の後半部分に基づいて回答。)

+0

ありがとう、私はそれをチェックします... – Matthias

関連する問題