make:对变量的替换引用不止一次?

时间:2012-07-23 07:58:12

标签: makefile

在我的makefile中,'clean'目标是通过使用.c.bak变量中的替换引用来删除SRC文件:

rm -f $(SRC:.c=.c.bak)

这会导致它删除SRC var中未以.c结尾的所有内容。

是否有一种优雅的方法可以对变量进行多次替换?例如,我想尝试用.cpp替换.cpp.bak ...

1 个答案:

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