1

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

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

这会导致它删除SRCvar 中不以.c.

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

4

1 回答 1

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)
于 2012-07-23T09:04:14.920 回答