小编Ant*_*iab的帖子

为什么AWK在makefile中无法正常工作?

注意:转义没有问题,来自shell的示例只是示例,在Makefile $$中.

GNU Makefile的人说为什么它不起作用:

请注意,模式规则中使用'%'的扩展发生在读取makefile之后发生的任何变量或函数扩展之后.

--orig.问题:
在纯shell中,下一个脚本正常工作:

echo "test2.cpp src2/test2.cpp src1/test1.cpp src1/test.cpp" | \
awk 'BEGIN{RS=" "}{if(NR == 1) f=$0; else if(match($0, f)) print $0;}'
Run Code Online (Sandbox Code Playgroud)

过滤器是第一个:test1.cpp
它返回:src1/test1.cpp

但是在Makefile中它无法正常工作(与awk相比错误):

OBJ_DIR:=obj    
SOURCES:=$(wildcard */*.cpp *.cpp)
OBJECTS_LOCAL:= $(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.cpp=.o)))
LOCAL_PATHS_HEADERS:=$(sort $(dir $(wildcard *.h */*.h)))

TARGET:=libcommon.a

all:$(TARGET)

$(TARGET): $(OBJECTS_LOCAL)
        ar -rcs $@ $^

$(OBJECTS_LOCAL): $(OBJ_DIR)/%.o : $(shell echo %.cpp $(SOURCES) | awk 'BEGIN{RS=" "}{if(NR == 1) f=$$0; else if($$0 ~ f) print $$0;}' )
        @mkdir -p $(OBJ_DIR)
        @$(CC) -c $< -o $@ …
Run Code Online (Sandbox Code Playgroud)

bash awk makefile sh

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

awk ×1

bash ×1

makefile ×1

sh ×1