为目录中的每个 .c 文件生成一个可执行文件

Generate an executable for each .c file in a directory

我的项目目录如下所示:

/project
    Makefile
    /src
        main.c
        foo.c
        bar.c
    /exec
        main
        foo
        bar

我希望 Makefile 为 /src 文件夹中的每个 .c 文件生成一个可执行文件,并将可执行文件放入 /exec 文件夹中。

这是我第一次使用 Makefile,我尝试了下面的代码,但它在 /src 文件夹中生成了 exec 文件,我希望它们位于 /exec 文件夹中

CFLAGS := -Wall -g
SRC_DIR := src
EXEC_DIR := exec

SRC_FILES := $(wildcard $(SRC_DIR)/*.c)

all: $(SRC_FILES:.c=)

.c:
    gcc $(CFLAGS) $< -o $(EXEC_DIR)/$@ 

您需要考虑不同的路径。

一个可能的解决方案是:

CFLAGS := -Wall -g
SRC_DIR := src
EXEC_DIR := exec

SRC_FILES := $(wildcard $(SRC_DIR)/*.c)

all: $(SRC_FILES:$(SRC_DIR)/%.c=$(EXEC_DIR)/%)

$(EXEC_DIR)/%: $(SRC_DIR)/%.c
    gcc $(CFLAGS) $< -o $@

提示:

您可以使用 make -n 检查哪些命令使 执行,但没有实际执行它们。

此外,它的选项 -p(打印数据库)和 -d(调试)有助于调试 Makefile。