更改.hpp文件时为什么不生成此makefile

时间:2016-05-13 23:29:30

标签: makefile

我遇到这个makefile的问题。我想每个.cpp文件获得一个依赖.hpp例如:一个文件main.cpp有一个依赖main.hpp

makefile运行良好,但是当我修改main.hpp时,Make不会重建。

有人能给我一个提示吗?感谢

objetivo=control
objetos=$(shell ls *.cpp | sed 's/cpp/o/')
optimizacion=-O2 -pipe
enlaces=-lncurses -lmenu -lpq -lform -lcdkw
CPP=g++ -std=c++11 -Wall

.PHONY: all clean debug rebuild

all:    $(objetivo)

.cpp.o: $*.hpp
    $(CPP) $(optimizacion) -c $<

debug: CPP += -g
debug: optimizacion=
debug: $(objetivo)

rebuild: clean all

$(objetivo):    $(objetos) 
    $(CPP) -o $@ $(enlaces) $(objetos)

clean:
    -rm *.o $(objetivo)

2 个答案:

答案 0 :(得分:1)

您的解决方案不对。现在,只要.o文件发生更改,就会重建.hpp,但.cpp文件发生更改时,不会重建%.o: %.cpp %.hpp $(CPP) $(optimizacion) -c $<

如果您想要两个不同的先决条件,则必须同时列出它们:

CPP

请注意,CXX不是C ++编译器的常用变量;标准变量是[ { "PERSON":"John" }, { "PLACE":"DC" }, { "PERSON":"John" }, { "PERSON":"Joe" }, { "RANDOM NAME 011":"random string" }, { "OTHER RANDOM NAME":"John" } ]

您的第一次尝试不起作用的原因是旧式后缀规则不允许任何先决条件。有关详细信息,请参阅手册。

答案 1 :(得分:0)

我找到了解决方案。

我将规则.ccp.o替换为:

%.o:    %.hpp %.cpp
        $(CPP) $(optimizacion) -c $*.cpp

现在每次我修改相关的hpp Make rebuild匹配的.cpp

非常感谢