Makefile GNU make不匹配%以从一个规则生成多个目标
我很难理解什么是基本的Makefile GNU make不匹配%以从一个规则生成多个目标,makefile,Makefile,我很难理解什么是基本的make行为,因为有多个先决条件和一些常见的词干,但它们必须由一条规则匹配 我试着读了这本书,似乎误解了一些基本原理 all: prefix-variant1.so prefix-variant2.so prefix-%.so : %.o @echo "variant with prerequisite succeeded" 当我运行make时,出现以下错误: make: *** No rule to make target 'prefix-variant1.
make
行为,因为有多个先决条件和一些常见的词干,但它们必须由一条规则匹配
我试着读了这本书,似乎误解了一些基本原理
all: prefix-variant1.so prefix-variant2.so
prefix-%.so : %.o
@echo "variant with prerequisite succeeded"
当我运行make
时,出现以下错误:
make: *** No rule to make target 'prefix-variant1.so', needed by 'all'. Stop.
我做错了什么
我做错了什么
请记住,make允许有许多并发模式/后缀规则。例如,一个对象文件<代码> %.o/COD>可以由C编译器从因此,只有在存在相应的先决条件文件(或可以构建,请参阅)时,才会考虑模式规则。在您的情况下,它是
variant1.o
。如果在当前目录中不存在这样的文件,并且没有其他规则适用于从源建立它,则忽略该规则,并称“没有规则使其成为目标”。如果没有模式先决条件存在,并且没有已知的规则来生成任何模式规则的先决条件,那么就不必考虑它。因此,如果您有一个模式规则%.o:%.c$(CC).
,您有一个variant1.c
文件,然后make将足够智能地连接点,构建varaint1.o
,然后prefix-variant1.so
。但是因为variant1.o
不存在,并且make不知道如何构建它,所以您得到了错误。@HardcoreHenry您是对的,谢谢。我有点粗心。在makein99%的情况下,说“存在”必须扩展为“存在或可以构建”,所以有时候你会忘记它。