Arnaud F.
Arnaud F.

Reputation: 8452

Specifying different output directory for target will not work

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" > $@

What am I doing wrong?

Upvotes: 0

Views: 1212

Answers (1)

Eldar Abusalimov
Eldar Abusalimov

Reputation: 25483

At least you have to modify prerequisites of all (value of $(OBJ)):

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

Then modify your pattern rule as follows:

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

Finally, after extracting ../Obj and ../Src to variables, you'll get something like:

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" > $@

Upvotes: 2

Related Questions