在Makefile中,当行包含模式$(TARGET)
时,我试图用$(OBJ1) $(OBJ2)
自动替换all:
。
假设Makefile只是
all: $(TARGET)
当我做awk '/all:/{gsub("$(TARGET)","$(OBJ1) $(OBJ2)"); print}' Makefile
时,它会给我
all: $(TARGET)
表示模式搜索失败。我尝试将\
放在$前面是徒劳的。我该怎么办? (我也尝试过gawk)
ADD :(找到解决方法后,发现另一个问题..)
这可以解决问题。它在.
处使用正则表达式$
。
但这是一个解决方法,应该有一个真正的解决方案来搜索$
字符。无论如何,我把它放在这里,以便有人可以获得帮助。
awk '/all:/{sub(".(TARGET)","$(OBJ1) $(OBJ2)");print}' Makefile
但是输出是这样的:
all: obj obj2 taxi_output $$(OBJ1) $(OBJ2))
在OBJ1之前有两个美元符号,在结尾处有两个')'字符。我该怎么办?
答案 0 :(得分:1)
使用sed:
sed '/^all:/{s/$(TARGET)/$(OBJ1) $(OBJ2)/g}' Makefile
您还可以使用-i
标志来覆盖文件。
这些与awk一起使用:
awk '/all:/{gsub("[$][(]TARGET[)]","$(OBJ1) $(OBJ2)"); print}' Makefile
awk '/all:/{gsub("\\$\\(TARGET\\)","$(OBJ1) $(OBJ2)"); print}' Makefile
awk '/all:/{gsub(/\$\(TARGET\)/,"$(OBJ1) $(OBJ2)"); print}' Makefile