FreeBSD Gnu Makefile

FreeBSD Gnu Makefile

本文关键字:Makefile Gnu FreeBSD      更新时间:2023-10-16

我想编译大约 100 和 100 个 .h .cpp文件。

如何创建 GNU Makefile, 在 FreeBSD 下编译。

我的意思是我不知道如何制作依赖项、lib、链接器。

您必须编译并.cpp .c .o .h

而且我从来没有使用过GNU Makefile。

这是一个 makefile,它将当前目录中的每个 cpp 文件编译成 program 。它是GNU使具体。请注意,在 FreeBSD 上,make 不是 GNU make!您需要安装并运行 gmake。

CPPFLAGS := # flags for preprocessing: -D -I etc.
CXXFLAGS := -Wall -pedantic -Wextra -Wformat=2
LDFLAGS  := # linker options, like -L/usr/local/boost/lib
LDLIBS   := # libraries to link to, e.g. -lboost_system
SOURCES := $(wildcard *.cpp)
OBJECTS := $(SOURCES:.cpp=.o)
all: program # by convention, the first (default) target is called "all"
program: $(OBJECTS)
        $(LINK.o) $^ $(LDLIBS) -o $@
clean:
        rm -f $(OBJECTS) program

GNU make 有内置的规则来从.cpp构建 .o;我们只需要为该规则提供一些参数(CPPFLAGS、CXXFLAGS)。

它还知道如何从单个program.o制作program。这在我们的例子中没有用,因为有多个 .o 文件。因此,我们必须明确地告诉 make,program取决于目标文件以及生成它的配方。

如果当前目录中有 foo.cpp 和 bar.cpp,则SOURCES的值为 foo.cpp bar.cppOBJECTS 将为 foo.o bar.o 。当您在没有显式目标的情况下调用make时,它会尝试构建它看到的第一个目标(all)。 all取决于program,所以尝试构建program。Make看到program需要foo.obar.o但它们不存在。幸运的是,make 看到有一个foo.cpp,它知道如何从中创建foo.o;与bar.o相同.编译C++文件以生成目标文件后,可以继续链接它们以生成program