在我的makefile中,'clean'目标是通过使用.c.bak
变量中的替换引用来删除SRC
文件:
rm -f $(SRC:.c=.c.bak)
这会导致它删除SRC
var中未以.c
结尾的所有内容。
是否有一种优雅的方法可以对变量进行多次替换?例如,我想尝试用.cpp
替换.cpp.bak
...
答案 0 :(得分:4)
如果所有源文件都显示备份,而不仅仅是 .c 和 .cpp 文件,则可以相应地更改替换:
rm -f $(SRC:=.bak)
或者,如果您使用的是GNU Make,您可以使用其文本处理功能准确说明您想要影响$(SRC)
中的哪些文件:
rm -f $(addsuffix .bak, $(filter %.c %.cpp,$(SRC)))
更经典的方法是查看如何构造$(SRC)
变量的值。如果它是一个明确的文件名列表(因为它应该是恕我直言),那么你可以从不同类型的源文件的中间变量构建它:
SRC_C = foo.c bar.c
SRC_CXX = baz.cpp apple.cpp
SRC = Makefile banana.pl carrot.pl $(SRC_C) $(SRC_CXX)
现在,您可以正确且可移植地编写原始替换(即,不需要GNU Make工具):
rm -f $(SRC_C:.c=.c.bak) $(SRC_CXX:.cpp=.cpp.bak)