简单的Makefile报告循环依赖 - 可能来自后缀规则?

时间:2015-03-05 04:00:09

标签: makefile gnu-make circular-dependency

我正在使用mingw32-make并尝试创建一个简单的规则来运行windres以包含Windows可执行文件的图标。

该结构由a.c中的简单C程序,仅包含该行的a.rs文件组成:

1 ICON "a.ico"

..图标文件本身和Makefile。

Makefile:

CC = gcc


all: a


%.rc.o: %.rc
    windres $< $@


a: a.o a.rc.o

我得到的输出:

>make                      
gcc    -c -o a.o a.c
make: Circular a.rc <- a.rc.o dependency dropped.
windres a.rc a.rc.o
gcc   a.o a.rc.o   -o a

输出文件都是正确创建的,但是我无法弄清楚如何编写.rc-&gt; .rc.o规则来摆脱循环依赖性消息。据我所知,它将它解释为suffix rule,其中%.rc.o表示该规则旨在从%.o创建%.rc,因此对%.rc的依赖是循环的...

我可以使用.rco代替.rc.o而且它不会产生此错误,但我更愿意将其保留为复合扩展名。

有没有办法创建一个模式规则,给出具有.ext1.ext2排序扩展名的输出,而不将其解释为后缀规则?

1 个答案:

答案 0 :(得分:1)

问题是make有一个内置规则来从目标文件foo构建可执行文件foo.o。在您的情况下,匹配目标%.rc.o的规则a.rc.o。然后,它会尝试查找将更新a.rc的规则,当它看起来会看到a.rc.o将存在时,它会匹配规则% : %.o,但后来意识到它有一个循环a.rc.o : a.rca.rc : a.rc.o的依赖关系。

最简单的事情是为a.rc定义一个明确的规则,以便它不会寻找模式规则:

a.rc : ;

或者,如果您不需要内置规则从目标文件创建可执行文件,则可以通过添加以下内容来取消它:

%: %.o

没有食谱。