简单的 Makefile 报告循环依赖——可能来自后缀规则?
Simple Makefile reporting circular dependency -- possibly from suffix rules?
我正在使用 mingw32-make 并尝试创建一个简单的规则 运行 windres
以包含 Windows 可执行文件的图标。
该结构由 a.c
中的一个简单 C 程序、一个仅包含以下行的 a.rs
文件组成:
1 ICON "a.ico"
..图标文件本身和 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->.rc.o 规则来摆脱循环依赖消息。据我所知,它正在将其解释为 suffix rule,其中 %.rc.o
表示该规则旨在从 %.o 创建 %.rc,因此对 %.rc 的依赖是循环的...
我可以使用 .rco
而不是 .rc.o
并且它不会生成此错误,但如果可能的话我更愿意将其保留在复合扩展中。
有没有什么方法可以创建一个模式规则,输出带有 .ext1.ext2 排序的扩展名,而不会将其解释为后缀规则?
问题是 make
有一个从目标文件 foo.o
构建可执行文件 foo
的内置规则。在您的情况下,make 匹配目标 a.rc.o
的规则 %.rc.o
。然后它试图找到一个将更新 a.rc
的规则,当它查找时发现 a.rc.o
将存在,因此它匹配规则 % : %.o
,但随后意识到它有一个循环a.rc.o : a.rc
和 a.rc : a.rc.o
.
的依赖关系
最简单的做法是为 a.rc
定义一个明确的规则,这样它就不会寻找模式规则:
a.rc : ;
或者,如果您不需要内置规则从目标文件创建可执行文件,您可以通过添加取消它:
%: %.o
没有食谱。
我正在使用 mingw32-make 并尝试创建一个简单的规则 运行 windres
以包含 Windows 可执行文件的图标。
该结构由 a.c
中的一个简单 C 程序、一个仅包含以下行的 a.rs
文件组成:
1 ICON "a.ico"
..图标文件本身和 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->.rc.o 规则来摆脱循环依赖消息。据我所知,它正在将其解释为 suffix rule,其中 %.rc.o
表示该规则旨在从 %.o 创建 %.rc,因此对 %.rc 的依赖是循环的...
我可以使用 .rco
而不是 .rc.o
并且它不会生成此错误,但如果可能的话我更愿意将其保留在复合扩展中。
有没有什么方法可以创建一个模式规则,输出带有 .ext1.ext2 排序的扩展名,而不会将其解释为后缀规则?
问题是 make
有一个从目标文件 foo.o
构建可执行文件 foo
的内置规则。在您的情况下,make 匹配目标 a.rc.o
的规则 %.rc.o
。然后它试图找到一个将更新 a.rc
的规则,当它查找时发现 a.rc.o
将存在,因此它匹配规则 % : %.o
,但随后意识到它有一个循环a.rc.o : a.rc
和 a.rc : a.rc.o
.
最简单的做法是为 a.rc
定义一个明确的规则,这样它就不会寻找模式规则:
a.rc : ;
或者,如果您不需要内置规则从目标文件创建可执行文件,您可以通过添加取消它:
%: %.o
没有食谱。