在 Makefile 中创建多个可执行文件

Creating multiple executables in Makefile

我对 makefile 还很陌生。我想通过我的 makefile 编译多个可执行文件,据我了解,具有多个条目的目标将 运行 该目标通过所有条目的配方。我的例子是:

$(EXE): $(OBJS)
    g++ -o $@ $< -L$(LIBPATH) -lOSApi -lrt -lpthread

我的 EXE 变量包含所有应该创建的文件,例如:prog1 prog2 等等。我的 OBJS 包含 prog1.o prog2.o 等等。

当 运行ning 使我完美地创建所有 .o 文件时,但我只创建了一个可执行文件。我试过用 $(EXE) 替换 $@ 等,但到目前为止运气不好。 任何帮助将不胜感激。

编辑: 我通过 MadScientist 找到了解决方案,他建议添加一个 all 目标,然后将我的可执行目标更改为:

$(EXE): % : %.o
    g++ -o $@ $< -L$(LIBPATH) -lOSApi -lrt -lpthread
.PHONY: all clean
all: $(EXE)

据我了解,这使得我的 EXE 目标中的每个目标都依赖于其对应的 .o 文件。

如果您提供完整的(小的)样本,将会有很大帮助。在这个问题中,你没有告诉我们 EXEOBJS 的定义是什么,这使得很难准确地说出来。

此外,请确保您的问题格式正确。

默认情况下,make 仅构建 makefile 中的第一个目标。它不会构建 makefile 中的所有目标。因此,如果 EXE 包含多个目标,并且您的 makefile 中的第一条规则是 $(EXE) : ...,那么只会构建该列表中的第一个目标。

你应该在上面添加一个新的目标,说你想要默认构建所有的exe。您可以随意称呼它,但惯例是称呼它 all:

all: $(EXES)

(您也可以添加一个.PHONY: all以确保安全)。现在 makefile 中的第一个目标是 all,作为先决条件,它将构建 EXES 变量中的所有目标。