在Makefile中,当该行包含模式all:
时,我试图用$(OBJ1) $(OBJ2)
自动替换$(TARGET)
假设Makefile只是
all: $(TARGET)
当我做awk '/all:/{gsub("$(TARGET)","$(OBJ1) $(OBJ2)"); print}' Makefile
时,它会给我
all: $(TARGET)
意味着模式搜索失败。我试着把放在$前面,但没有成功。我该怎么做?(我也试着目瞪口呆(
ADD:(找到一个变通办法后,发现另一个问题。(
这就奏效了。它使用正则表达式.
代替$
但这是一个变通办法,应该有一个真正的解决方案来搜索$
字符。不管怎样,我把它放在这里是为了有人能得到帮助。
awk '/all:/{sub(".(TARGET)","$(OBJ1) $(OBJ2)");print}' Makefile
但输出是这样的:
all: obj obj2 taxi_output $$(OBJ1) $(OBJ2))
OBJ1前面有两个美元符号,末尾有两个"("字符。我该怎么办?
使用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