在Linux上,当通过Makefile进行编译时,我在复制目标时遇到了一些错误:
all: $(TARGET)
$(TARGET): $(OBJ)
$(AR) $(ARFLAGS) $(TARGET) $(OBJ)
chmod 775 $(ETARGET) $(OBJ)
$(shell cp libTrgt.a ../../../../lib)
在此makefile中发出错误
cp:不能统计`libTrgt.a':没有这样的文件或目录,
即使我看到它在当前目录中。
当我将它分成两个目标时,它会成功,我不确定原因:
all: $(TARGET) COPY
$(TARGET): $(OBJ)
$(AR) $(ARFLAGS) $(TARGET) $(OBJ)
chmod 775 $(ETARGET) $(OBJ)
COPY:
$(shell cp libTrgt.a ../../../../lib)
导致错误的原因是什么?
答案 0 :(得分:3)
这里的问题是$(shell ...)
命令在解析Makefile时正在执行,而创建库$(AR)
的命令稍后会执行。
执行复制命令时,库文件不存在。爱好。
您应该更简单地将Makefile编写为:
all: $(TARGET)
$(TARGET): $(OBJ)
$(AR) $(ARFLAGS) $(TARGET) $(OBJ)
chmod 775 $(ETARGET) $(OBJ)
cp libTrgt.a ../../../../lib/