Makefile忽略标头修改

时间:2017-07-12 17:54:33

标签: c++ makefile header

我有一个包含多个文件夹的项目:

chipCloudList

所有Project |_ include/ | '- Eigen/ |_ obj/ |_ src/ |_ makefile个文件都在.cpp中,并且与src/中的多个.hpp文件以及与特征库的文件具有依赖关系。

现在,每当我编辑源文件时,我都可以使用make命令,但是当我更改头文件时,它会告诉我include/是最新的。

我已经尝试了几个我在类似问题上找到的示例,并且我已经阅读了一些关于makefile的教程,但我无法使其正常工作。

每次编译时,如果使用特征库的.cpp被修改,它需要非常长的时间,就像它再次读取所有Eigen头一样。

我的makefile:

all

(我已尝试thisthat,但它甚至无法编译。)

谢谢!

2 个答案:

答案 0 :(得分:0)

您必须明确告诉make您的目标依赖于头文件。

有许多自动方法可以执行此操作,但您也可以只将标题文件添加到SOURCES列表中(现在只包含.cpp个文件)。

答案 1 :(得分:0)

最简单的方法是使所有头文件每个目标文件的先决条件:

INCDIR := include
HEADERS := $(notdir $(wildcard $(INCDIR)/*.h))

$(OBJDIR)/%.o: $(SRCDIR)/%.$(SRCEXT) $(HEADERS)
    ...

这是粗略但有效。只要任何头文件发生更改,就会导致Make重新编译所有目标文件。这是过度的,并且有更多微妙的方法可以避免所有不必要的工作,但在尝试之前必须先了解这一点。