![](/img/trans.png)
[英]How to generate dependencies with header files from different directories using a Makefile?
[英]How to do makefile to compile multiple .cpp files in different directories using a single makefile?
我的proj2目录中有以下文件,需要将它们编译在一起才能生成一个可执行文件。
proj2/main.cpp
proj2/model/Player.cpp
proj2/model/gameBoard.cpp
proj2/controller/TTTController.cpp
proj2/Makefile
我在makefile中使用以下命令,但它不起作用。
all:
g++ /project2_p1/main.cpp /project2_p1/controller/TTTController.cpp /model/gameBoard.cpp /model/Player.cpp -o ttt
clean:
-rm ttt
请有人帮帮我。谢谢
我强烈建议你开始学习make
因为它是程序员使用的基本工具之一。 而且,如果你能学习C++
,你肯定可以学习make
。
在您的项目中,您将源文件隐藏在它们自己的子目录中,因此为了找到它们,您可以使用$(shell find...)
命令。 与项目中的任何头文件相同。
通过使all:
直接目标它无条件执行,你失去了使用make
的好处 - 只在你改变一些东西时编译。
说过我在这里提供的基本模板可以改进,只重新编译那些已经改变的源文件,但这是读者的练习。
我认为这应该适用于你的情况:
# 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)
多数民众赞成我的minGW
项目的makefile代码:
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
文件夹包含名为main.exe
的.exe
文件。 您可以像这样更改或删除它
run:
./main
我希望它能奏效。
@Galik有权利。 如果你想学习C++
,你一定要学习make
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.