我的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
请有人帮帮我。谢谢你
答案 0 :(得分:0)
我强烈建议您开始学习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)
答案 1 :(得分:0)
那是我的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
文件夹包含名为.exe
的{{1}}文件。您可以像这样更改或删除
main.exe
我希望它能奏效。
@Galik有权利。如果你想学习run:
./main
,你一定要学习C++
。