【发布时间】:2023-04-02 19:24:01
【问题描述】:
我有一个 makefile,一个 sn-p 看起来像这样(为清楚起见重命名了文件和目标):
target1 : OtherLib.o MyProg.h MyProg.cpp g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o当我运行“make target1”时,我想检查一下 MyProg.h 和 MyProg.cpp 是否是最新的,如果不是,则运行 target1。但是,我收到错误
make: *** 没有规则来制作目标 `MyProg.cpp',`target1' 需要。停止。但“MyProg.cpp”是我要编译的!所以,我给它做了一个空的目标,像这样:
MyProg.h: MyProg.cpp: target1 : OtherLib.o MyProg.h MyProg.cpp g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o这可行,但看起来很奇怪。我的印象是,如果我只是这样做:
目标1:OtherLib.o g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o然后 MyProg 将被编译,无论它是否是最新的,因为 MyProg.cpp 没有被列为依赖项。这样做的正确方法是什么,以便只有在 MyProg.cpp 和 MyProg.h 不是最新的情况下,make 才会编译 MyProg.o?
【问题讨论】:
标签: dependencies makefile