我有一个 Makefile,它有两个变量:
SOURCE_DIR := ./source
BUILD_DIR := ./build
C_FILES := $(shell find $(SOURCE_DIR) -name '*.c')
BIN_FILES := $(patsubst $(SOURCE_DIR)%.c,$(BUILD_DIR)%, $(C_FILES))
$(C_FILES)
和都是$(BIN_FILES)
两个字符串。一个是所有现有文件的路径,.c
用空格分隔,另一个是所有相应的可执行文件的字符串(没有扩展名且尚未生成)
我的下一步计划是编写一条规则,使用 C_FILES 中相应的“元素”为 BIN_FILES 中的每个“元素”构建一个二进制文件。但是,我对 Make 还很陌生,我仍然无法弄清楚如何编写一条可以迭代一对变量的规则。
我试过:
$(BIN_FILES): %:%.c
cc $< -o $@
all: $(BIN_FILES)
但是当我运行时,make all
它一直坚持认为这build/ch01/hello.c
是有道理的,因为它正在寻找./build/...
类似的模式。我如何让先决条件模式make
查找s./ource/...
,同时在./build/..
任何关于使用变量生成和调用规则的帮助$(BIN_FILES)
都$(C_FILES)
将非常感激。