C++ GNU有点像双冒号

C++ GNU有点像双冒号,c++,makefile,gnu,C++,Makefile,Gnu,我在理解以下gmake语法时遇到了一个小问题: OBJ = foo.o bar.o $(OBJ): %.o: %.cpp $(CC) -c -MMD -MP $(INCLUDES) $(CFLAGS) $< -o $@ @sed (...create empty targets in file...) OBJ=foo.o bar.o $(OBJ):%.o:%.cpp $(CC)-c-MMD-MP$(包括)$(CFLAGS)$

我在理解以下gmake语法时遇到了一个小问题:

OBJ = foo.o bar.o

$(OBJ): %.o: %.cpp
    $(CC) -c -MMD -MP $(INCLUDES) $(CFLAGS) $< -o $@
    @sed (...create empty targets in file...)
OBJ=foo.o bar.o
$(OBJ):%.o:%.cpp
$(CC)-c-MMD-MP$(包括)$(CFLAGS)$<-o$@
@sed(…在文件中创建空目标…)
我不确定$(…):%.o:%.cpp是做什么的

我认为它可能会将“%.o:%.cpp”翻译成正确的%.cpp依赖项-是吗?谷歌在这方面帮不了什么忙——它只找到了通常的双冒号(target::),这是不一样的

有什么建议吗?谢谢

这是一个问题


$(OBJ)
是目标列表。
%.o:%.cpp
意味着“对于列表中与
%.o
匹配的每个目标,它依赖于
%.cpp
”(其中
%
被相应地替换)。

这在互联网上有广泛的记录。你做了什么研究?可能是错误的-不知道这叫做“静态模式规则”@LightnessRacesinOrbit:很难在谷歌搜索语法模式。真的,要做到这一点(从第一原则)的唯一方法是拖网文件,直到你发现的模式。哈哈…用正确的名字…它甚至在我的梅克伦堡书…我只是没有找到它…抱歉打扰你@LightnessRacesinOrbit:mhm…我上周阅读了make文档(O'reilly书、示例、更复杂的文件…)为了更深入地理解这些东西是如何工作的,并在这个问题上留下深刻的印象…在某个时候,应该允许它只问一个问题-尽管我理解你回答这些愚蠢的东西的时间是多么少…这非常有帮助!