Makefile-为变量中的每个字段执行规则

时间:2019-02-03 22:33:53

标签: makefile

我的项目二进制文件以及用于构建它的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中执行。

谢谢您的回答:]

1 个答案:

答案 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