繁体   English   中英

如何使用makefile在不同的目录中编译多个.cpp文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM