为目录中的每个 .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。
我的项目目录如下所示:
/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。