This question already has an answer here:
Recursive Dependencies Between make Targets in Same Makefile
(1个答案)
3年前关闭。
这是我的Makefile的简化版本:
上面提到的所有这些文件都是真实文件。当我更改
没有描述真正的依赖关系。更改
如果
手动维护各个依赖项很容易出错,这就是为什么大多数编译器都提供了可以自动创建依赖项文件的功能的原因,这些文件可以包含在make文件中。然后,您可以提供更多通用规则进行编译。有关如何使用它的更多详细信息,请查看this article。
(1个答案)
3年前关闭。
这是我的Makefile的简化版本:
all: myprogram
myprogram: main.o
c++ main.o -o myprogram
main.o: main.cpp mylib.hpp
c++ -c main.cpp
mylib.hpp: mylib.inl
上面提到的所有这些文件都是真实文件。当我更改
mylib.hpp
时,main.cpp
重新编译。但是,我的问题是,当我更改mylib.inl
时,main.cpp无法重新编译。在编辑main.o
时,如何使myprogram
目标以及mylib.inl
目标无效?我希望而不是使用.PHONY
目标,因为我不想每次都重新编译所有内容,仅当我编辑mylib.inl
时。 最佳答案
您的问题是makefile中描述的依赖项:
mylib.hpp: mylib.inl
没有描述真正的依赖关系。更改
mylib.inl
不会更改mylib.hpp
(没有规则触发此类更改)。如果
mylib.inl
中包含了mylib.hpp
,那么它实际上应该是对main.o
的依赖而不是mylib.hpp
,从而导致如下所示的依赖关系:main.o: main.cpp mylib.hpp mylib.inl
手动维护各个依赖项很容易出错,这就是为什么大多数编译器都提供了可以自动创建依赖项文件的功能的原因,这些文件可以包含在make文件中。然后,您可以提供更多通用规则进行编译。有关如何使用它的更多详细信息,请查看this article。
关于c++ - Makefile:没有规则的依赖项不会使父项无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43600077/
10-13 03:40