我正在尝试与此类似的事情:
obj/32/%.o: src/all/%.c src/$(ARCH)/%.c
@mkdir -p obj/32 || true
$(CC) $(CFLAGS) -m32 -c $< -o $@
objcopy --strip-unneeded $@
我希望它检查src/all/<file>.c
是否存在,如果不存在,请改用src/$(ARCH)/<file>.c
。
但是,它不起作用。它会尝试创建一个依赖项为obj/32/%.o
和src/all/%.c
的名为src/$(ARCH)/%.c
的目标。
我该怎么做?
答案 0 :(得分:0)
我希望它检查
src/all/<file>.c
是否存在,如果不存在,请改用src/$(ARCH)/<file>.c
。
在这种情况下,一种选择是创建指向以下文件之一的符号链接:
src/<file>.c : # no dependencies
test -f src/all/<file>.c && ln -fs src/all/<file>.c $@ || ln -fs src/$(ARCH)/<file>.c $@
然后使用该符号链接:
obj/32/%.o : src/<file>.c | obj/32
$(CC) $(CFLAGS) -m32 -c -o $@ $<
objcopy --strip-unneeded $@
obj/32 :
mkdir -p $@ || true
在上面,它使用目录的仅顺序依赖关系,因此目录是常规的make目标。
或者,使用vpath
:
vpath %.c src/all
vpath %.c src/$(ARCH)
obj/32/%.o: %.c
@mkdir -p obj/32 || true
$(CC) $(CFLAGS) -m32 -c $< -o $@
objcopy --strip-unneeded $@
上面可能有错误,因为我无法测试,但您应该明白。