为目标指定不同的输出目录将不起作用

时间:2012-02-15 16:37:15

标签: makefile

SOURCE := ../Src/Folder1/source.a66
OBJ := ../Src/Folder1/source._ia
OUT := ../Obj

all: $(OBJ)
    echo "DONE"

# 1) Works    
%._ia: %.a66
    echo "Test" > $@
# 2) Don't work
$(OUT)/%._ia: %.a66
    echo "Test" > $@

  • 当我使用第一个目标时,文件在../Src/Folder1
  • 中创建
  • 当我使用第二个目标时,在运行时我得到:

      

    make: *** No rule to make target '../Src/Folder1/Os_cpu_a._ia', needed by '../Obj/target'. Stop.

  •   
  我做错了什么?

1 个答案:

答案 0 :(得分:2)

至少你必须修改all的先决条件(值$(OBJ)):

OBJ := ../Obj/Folder1/source._ia

然后按如下方式修改模式规则:

../Obj/%._ia: ../Src/%.a66
    echo "Test" > $@

最后,在将../Obj../Src提取到变量之后,你会得到类似的内容:

SRC_DIR := ../Src
OBJ_DIR := ../Obj

SRC := $(SRC_DIR)/Folder1/source.a66
OBJ := $(SRC:$(SRC_DIR)/%.a66=$(OBJ_DIR)/%._ia)

$(OBJ_DIR)/%._ia: $(SRC_DIR)/%.a66
    echo "Test" > $@