简单的Makefile报告循环依赖关系——可能来自后缀规则?
我正在使用mingw32-make并试图创建一个简单的规则来运行简单的Makefile报告循环依赖关系——可能来自后缀规则?,makefile,gnu-make,circular-dependency,Makefile,Gnu Make,Circular Dependency,我正在使用mingw32-make并试图创建一个简单的规则来运行windres,以包含Windows可执行文件的图标 该结构由a.C中的一个简单C程序和a.rs文件组成,该文件仅包含以下行: 1图标“a.ico” ..图标文件本身和Makefile 生成文件: CC = gcc all: a %.rc.o: %.rc windres $< $@ a: a.o a.rc.o CC=gcc 全部:a %.rc.o:%.rc 温德雷斯美元$@ a:a.o a.rc.o 我
windres
,以包含Windows可执行文件的图标
该结构由a.C
中的一个简单C程序和a.rs
文件组成,该文件仅包含以下行:
1图标“a.ico”
..图标文件本身和Makefile
生成文件:
CC = gcc
all: a
%.rc.o: %.rc
windres $< $@
a: a.o a.rc.o
CC=gcc
全部:a
%.rc.o:%.rc
温德雷斯美元$@
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
>制作
gcc-c-o a.o a.c
make:Circular a.rc问题在于make
有一个内置规则,用于从对象文件foo.o
构建可执行文件foo
。在您的情况下,make匹配目标a.rc.o
的规则%.rc.o
。然后,它试图找到一个将更新a.rc
的规则,当它查看时,它看到a.rc.o
将存在,因此它匹配规则%:%.o
,但随后意识到它对a.rc.o:a.rc
和a.rc:a.o
具有循环依赖性
最简单的方法是为a.rc
定义一个显式规则,这样它就不会查找模式规则:
a.rc : ;
或者,如果不需要内置规则来从对象文件创建可执行文件,可以通过添加以下内容来取消:
%: %.o
没有配方。您已经找到了make关于.o
的一个隐式规则(我不确定是哪一个),最简单的解决方案就是将%.rc.o
更改为在末尾有一个不同的文件类型,例如%.rc.out
。另一个解决方案是删除所有隐式规则,然后自己编写规则。。。在给出如何绕过规则的答案之前,我最终使用了.rs.obj,并且.res也是一个选项(技术上正确,但我不太清楚)。好吧,我想我必须这样做,或者干脆不使用.o。我最终在许多项目中重新定义了excutable->object文件,因此在这些情况下,这将是一个有用的解决方案;否则我会使用像.rc.obj或默许.res。。。