2016-10-17 4 views
1

私は自分のproj2ディレクトリに以下のファイルを持っており、それらを一緒にコンパイルして1つの実行可能ファイルを持つ必要があります。メイクファイルを使用して異なるディレクトリにある複数の.cppファイルをコンパイルするにはどうすればよいですか?

proj2/main.cpp 
    proj2/model/Player.cpp 
    proj2/model/gameBoard.cpp 
    proj2/controller/TTTController.cpp 
    proj2/Makefile 

メイクファイル内で次のコマンドを使用していますが、動作しません。

all: 
    g++ /project2_p1/main.cpp /project2_p1/controller/TTTController.cpp   /model/gameBoard.cpp /model/Player.cpp -o ttt 
clean: 
    -rm ttt 

誰でもplease.Thankにあなたを手伝ってくれる

+5

基本的なUnixコマンドラインターミナルチュートリアルを読む必要があります。先行する '/'はパスの中で何を意味すると思いますか? –

+2

* Makeなしでビルドする方法が分かるまで、Makeでビルドすることはできません。 – Beta

答えて

0

私は強くあなたはそれがプログラマが使用する基本的なツールの一つであるとしてmakeを学び始めるお勧めします。 C++を学ぶことができれば、間違いなくmakeを学ぶことができます。

あなたのプロジェクトでは、自分のサブディレクトリにソースファイルが埋め込まれているので、それらをすべて見つけるには$(shell find...)コマンドを使用できます。プロジェクトのヘッダーファイルと同じです。あなたが何かを変更したときにのみコンパイル - それは無条件に実行されます、あなたはmakeを使用する利点を失うall:直接ターゲットにすることにより

私がここで提供している基本テンプレートは、変更されたソースファイルだけを再コンパイルするように改善できますが、それは読者のための練習です。

私は、これはあなたのケースで動作するはずだと思う。私のminGWプロジェクトのメイクファイルのコードのthats

# set non-optional compiler flags here 
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic-errors 

# set non-optional preprocessor flags here 
# eg. project specific include directories 
CPPFLAGS += 

# find cpp files in subdirectories 
SOURCES := $(shell find . -name '*.cpp') 

# find headers 
HEADERS := $(shell find . -name '*.h') 

OUTPUT := ttt 

# Everything depends on the output 
all: $(OUTPUT) 

# The output depends on sources and headers 
$(OUTPUT): $(SOURCES) $(HEADERS) 
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $(OUTPUT) $(SOURCES) 

clean: 
    $(RM) $(OUTPUT) 
0

を:

プロジェクトで
hepsi: derle calistir 
Nesneler := ./lib/Hata.o ./lib/Hatalar.o ./lib/Dugum.o ./lib/ListeGezici.o ./lib/BagilListe.o 

    derle: 
     g++ -I ./include/ -o ./lib/Hata.o -c ./src/Hata.cpp 
     g++ -I ./include/ -o ./lib/Hatalar.o -c ./src/Hatalar.cpp 
     g++ -I ./include/ -o ./lib/Dugum.o -c ./src/Dugum.cpp 
     g++ -I ./include/ -o ./lib/ListeGezici.o -c ./src/ListeGezici.cpp 
     g++ -I ./include/ -o ./lib/BagilListe.o -c ./src/BagilListe.cpp 
     g++ -I ./include/ -o ./bin/test $(Nesneler) ./src/test.cpp 

    calistir: 
     ./bin/test 

私はこれが動作すると思います。

all: compile run 
Objects := ./lib/Player.o ./lib/gameBoard.o ./lib/TTTController.o 

compile: 
    g++ -I ./include/ -o ./lib/Player.o -c ./model/Player.cpp 
    g++ -I ./include/ -o ./lib/gameBoard.o -c ./model/gameBoard.cpp 
    g++ -I ./include/ -o ./lib/TTTController.o -c .controller/TTTController.cpp 
    g++ -I ./include/ -o ./bin/main $(Objects) ./main.cpp 

run: 
    ./bin/main 

libフォルダーには.oファイルが含まれています。あなたが望むならば、それは偶然かもしれません。 includeフォルダは、あなたのヘッダ.hまたは.hppファイルを参照します。ヘッダーの場所に応じてそれぞれを変更することができます。

binフォルダーには、.exeというファイルmain.exeが含まれています。そのように変更または削除することができます

私はうまくいくことを願っています。

@ガリクが正しいです。 C++を学びたい場合は、間違いなくmakeを学ぶ必要があります。

関連する問題