我有我的项目二进制文件位于我的版本库的根,有一个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文件,但我无法得到它的权利。 最后,我只是不知道如何执行规则给定变量的各个领域,这一个Makefile中,如果有任何的方式来做到这一点。
谢谢您的回答 :]
你GNU make来生成命令序列由字段变量变化的方式是使用foreach function,例如
Makefile文件
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;
不需要壳回路。
还需要注意的是,你需要更正:
make -C clean <directory>
至:
make -C <directory> clean