2016-12-08 5 views
0

コンパイラのオブジェクトファイルをソースファイルとは別のフォルダに配置したいと思います。私はソースコードがビルドされているのと同じフォルダ構造を使用しているときに動作させましたが、これは私が探している解決策ではありません。次は何私が今まで持ってオブジェクトと依存ファイルを別々のフォルダに自動配置するMakefile

obj/main.o 
obj/myClass.o 

依存

dep/main.d 
dep/main.d 

出典:

src/main.cpp 
src/myClass/myClass.cpp 

オブジェクト私が好む何

は以下のとおりです。

個の

変数ここ

$(OBJLIST)=obj/main.o obj/myClass.o 
$(SRCDIR)=src 
$(OBJDIR)=obj 

リンカ

$(PROJECT): $(OBJLIST) 
    $(CXX) $(OBJLIST) $(LIBS) -o [email protected] 

コンパイラとは

これが働いているものです私の問題である

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp 
    @mkdir -p $(DEPDIR) $(OBJDIR) 
    $(CXX) $(CPPFLAGS) -c $< -o [email protected] 
    $(CXX) $(CPPFLAGS) -MM -MT 1_obj/main.o 0_src/main.cpp -o 2_dep/main.dep 
$(OBJDIR)/%.o: $(SRCDIR)/myClass/%.cpp 
    @mkdir -p $(DEPDIR) $(OBJDIR) 
    $(CXX) $(CPPFLAGS) -c $< -o [email protected] 
    $(CXX) $(CPPFLAGS) -MM -MT 1_obj/myClass.o 0_src/myClass/myClass.cpp -o 2_dep/myClass.dep 

私も含むSRCDIRSと呼ばれるオブジェクトいます

SRCDIRS 
    ./ 
    ./myClass 

は、だから私は、私は

$(OBJDIR)/%.o: $(SRCDIR)/$(SRCDIRS)/%.cpp 
    @mkdir -p $(DEPDIR) $(OBJDIR) 
    $(CXX) $(CPPFLAGS) -c $< -o [email protected] 
    $(CXX) $(CPPFLAGS) -MM -MT [email protected] @< -o $(DEPDIR)/$(notdir $(basename $<).dep) 

のようなものにコンパイル定義をマージすることができ望んだが、私は、何とかそれを、これは両方の可能性のための一般化を望んだが、 SRCDIRSをループして一致するものがないかどうかを確認しません。

+0

一般的な方法は、 '.d'ファイルをmakefileに含めることです。 –

+0

これは本当に私の問題ではありません、私はどのように私は自動的に別のフォルダにoファイルを置くことができます知っていると思います。しかし、.cppファイルのフォルダ構造全体を再構築する必要はありません。したがって、すべてのフォルダとサブフォルダからすべてのソースファイルを取得し、コンパイル中にo-ファイルを単一のフォルダに配置します。 – Lucian

答えて

0

vpathとすることができます。 VPATHはのみソースファイルを見つけるために使用できることに注意してください。

ので、このような何か:

VPATH = $(SRCDIRS) 

$(OBJDIR)/%.o : %.c 
     ... 

はあなたが必要とするすべてです。

+0

ありがとうございました。これは問題を完全に解決しました。 – Lucian

関連する問題