通过Makefile进行编译时,在复制文件时会出现一些错误

时间:2017-04-13 11:37:53

标签: linux makefile

在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)

导致错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

这里的问题是$(shell ...)命令在解析Makefile时正在执行,而创建库$(AR)的命令稍后会执行。

执行复制命令时,库文件不存在。爱好。

您应该更简单地将Makefile编写为:

all: $(TARGET)

$(TARGET): $(OBJ)
     $(AR) $(ARFLAGS) $(TARGET) $(OBJ)
     chmod 775 $(ETARGET) $(OBJ)
     cp libTrgt.a ../../../../lib/