【发布时间】:2012-12-07 02:03:04
【问题描述】:
我有一个文件夹结构,我的所有源文件都在 ./src/ 中,我所有的目标文件都在 ./obj/ 中(具有相同的内部目录结构,使用路径替换进行镜像)。我创建了以下生成文件:
$(EXECUTABLE): $(OBJECTS)
@echo Linking $(EXECUTABLE)...
$(CXX) $(LDLIBS) $(OBJECTS) -o $(EXECUTABLE)
%.o: $(subst o,cpp,$(subst obj/,src/,$@))
@echo Building $@...
$(CXX) $(CPPFLAGS) -c $(subst o,cpp,$(subst obj/,src/,$@)) -o $@
这不起作用! Make 一直声称目标文件是最新的,即使源文件实际上比目标文件更旧。另一方面,如果我这样做:
obj/main.o: src/main.cpp
@echo Building $@...
$(CXX) $(CPPFLAGS) -c src/main.cpp -o $@
对于每个源文件,它都能完美运行。我检查了一下,两个subst 给出了相同的结果(obj/main.o 变成了 src/main.cpp 符合预期)。然而 Make 出于某种原因不接受依赖。
这让我很伤心,有人可以解释我哪里出错了吗?我不明白发生了什么,我认为我的替换会起作用,因为它给出了相同的输出。我不允许在依赖项中使用subst 或$@ 吗?
【问题讨论】:
标签: makefile