我的项目二进制文件以及用于构建它的Makefile位于存储库的根目录。
该二进制文件使用了我的许多自制库,这些库位于我的lib/
文件夹
出于构建(和清理)存储库二进制文件的目的,我想执行以下执行:
不是对以下几行进行硬编码,
clean_binaries:
make -C clean lib/folder1 -s
make -C clean lib/folder2 -s
make -C clean lib/another_folder -s
我创建了BIN_PATH
变量,其中包含先前的路径。
BIN_PATHS = lib/folder1 \
lib/folder2 \
lib/another_folder
并制定了一条简单的规则:
clean_binaries: $(BIN_PATHS)
make -C clean $< -s
但它仅对变量的第一字段(lib/folder1
)执行该行,这不是我想要执行的操作。
我考虑过使用隐式规则(?),就像我编译.c文件一样,但是我做对了。
最后,我只是想知道如何对给定变量的每个 field 执行规则,如果有任何方法可以在Makefile中执行。
谢谢您的回答:]
答案 0 :(得分:0)
获取GNU的方式来生成一系列命令,这些命令因 变量中的字段将使用foreach function,例如
制作文件
BIN_PATHS := lib/folder1 lib/folder2 lib/another_folder
.PHONY: clean_binaries
clean_binaries:
$(foreach path,$(BIN_PATHS),make -C $(path) clean ;)
运行方式:
$ make
make -C lib/folder1 clean -s; make -C lib/folder2 clean -s; make -C lib/another_folder clean -s;
不需要shell循环。
请注意,您需要更正:
make -C clean <directory>
收件人:
make -C <directory> clean