Makefile:没有规则的依赖项不会使父项无效
Makefile: A dependency without a rule doesn't invalidate parent
这是我的 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 不会 而不是 重新编译。如何在编辑 mylib.inl
时使 main.o
目标以及 myprogram
目标无效?我宁愿 而不是 使用 .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。
这是我的 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 不会 而不是 重新编译。如何在编辑 mylib.inl
时使 main.o
目标以及 myprogram
目标无效?我宁愿 而不是 使用 .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。