我遇到这个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)
答案 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
非常感谢