我正在使用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排序扩展名的输出,而不将其解释为后缀规则?
答案 0 :(得分:1)
问题是make
有一个内置规则来从目标文件foo
构建可执行文件foo.o
。在您的情况下,匹配目标%.rc.o
的规则a.rc.o
。然后,它会尝试查找将更新a.rc
的规则,当它看起来会看到a.rc.o
将存在时,它会匹配规则% : %.o
,但后来意识到它有一个循环a.rc.o : a.rc
和a.rc : a.rc.o
的依赖关系。
最简单的事情是为a.rc
定义一个明确的规则,以便它不会寻找模式规则:
a.rc : ;
或者,如果您不需要内置规则从目标文件创建可执行文件,则可以通过添加以下内容来取消它:
%: %.o
没有食谱。