2017-11-17 11 views
0

私はMakefileの新機能です。私は次のメイクファイルを作成しました(どちらも動作しません)。私はgenntatedオブジェクトコードをdifferntフォルダに入れませんでした(フォルダは現在のディレクトリにあります)。オブジェクトコードを別のフォルダに配置するメークファイルを作成するには

$ ls 
main.cpp Makefile object_code Time.cpp Time_.h 

どうすればいいですか?

VER = Debug 
CC = g++ 


OBJECTFIELS = ./object_code/main.o ./object_code/Time.o 

../$(VER)/main: $(OBJECTFIELS) 
    $(CC) $(OBJECTFIELS) -o [email protected] 

$(OBJECTFIELS): Time_.h 

./object_code/main.o: main.cpp 

./object_code/Time.o: Time.cpp 

clean: 
    rm $(OBJECTFIELS) main 

これはエラーです。

$ make 
g++ ./object_code/main.o ./object_code/Time.o -o ../Debug/main 
g++: error: ./object_code/main.o: No such file or directory 
g++: error: ./object_code/Time.o: No such file or directory 
g++: fatal error: no input files 
compilation terminated. 
Makefile:8: recipe for target '../Debug/main' failed 
make: *** [../Debug/main] Error 1 

これは最後の質問ですか?

答えて

0

あなたがここに投稿したメイクファイルでどのように出力を得ることができないのか分かりません。

オブジェクトファイルがすでに存在している場合は、そのエラーを印刷するのではなく、リンクが成功します。

オブジェクトファイルは存在しません。その場合、makeはどのように作成するのか分からないために文句を言います。使用しているメークファイルとここに投稿したメークファイルには、ある程度の違いがあります。

いずれの場合でも、makeはファイルfoo.cppからファイルfoo.oを作成する方法を知っています。文字列はfooです。それを行う方法を示す組み込みルールがあります。

しかし、fooに関係なく、ファイルfoo.cppからファイル./object_code/foo.oをビルドする方法はわかりません。いくつかのオブジェクトファイルをランダムにディレクトリに作成する方法を教えてくれる組み込みルールはありません。 makeがそれをしたいのであれば、それをどのように伝える必要があります。私はここで、コンパイラ変数としてCXXを使用しています(

./object_code/main.o: main.cpp 

./object_code/Time.o: Time.cpp 

object_codeディレクトリにオブジェクトファイルを構築する方法を説明pattern ruleに置き換える:あなたが行を削除する必要が慣例CCでは、CコンパイラとCXXですC++コンパイラです。そうしないと良い理由がない限り、常にコンベンションに固執する必要があります)。

VER = Debug 
CXX = g++ 

OBJECTFIELS = ./object_code/main.o ./object_code/Time.o 

../$(VER)/main: $(OBJECTFIELS) 
     $(CXX) $(OBJECTFIELS) -o [email protected] 

$(OBJECTFIELS): Time_.h 

./object_code/%.o : %.cpp 
     $(CXX) -c -o [email protected] $< 

clean: 
     rm $(OBJECTFIELS) main 
関連する問題