首页 > 解决方案 > 执行 make 时出错:mingw32-make: *** No rule to make target

问题描述

我必须创建一个 Makefile,它从不同文件夹中的 .c 文件创建单个可执行文件。.c 文件包括来自任何这些文件夹的头文件。根目录有 3 个子目录 x/y、x/z、a,所有这些子目录都有一些 .c 和 .h 文件。我想从根目录编译程序。这些子目录的本质是可以随时添加/删除新的 .c 文件,因此不可能在 Makefile 中硬编码它们的名称。

到目前为止,我已经创建了这个 Makefile

CC = gcc
INCLUDES = -Ix/y -Ix/z -Ia -Ilib/include
LIB = -lp -lq -lr

demo: x/y/*_d.o x/z/*_l.o a/*_m.o
    $(CC) $^ $(LIB) -Llib -o b/demo.exe

%_d.o:: x/y/%.c
    $(CC) $(INCLUDES) -c $<

%_l.o:: x/z/%.c
    $(CC) $(INCLUDES) -c $<

%_m.o:: a/%.c
    $(CC) $(INCLUDES) -c $<

我需要一个能够自行处理这种情况的解决方案。此外,如果将单个文件添加到这些文件夹之一,则只应构建其依赖项,而不是重新构建所有 .c 文件。TIA。

标签: cmakefilebuildmingw32

解决方案


你大部分时间都在那里。您只需要一个简单的规则即可将 .c 编译为 .o,例如

.co: $(CC) $(包括) -c $<

带有通配符的依赖关系是可以的。


推荐阅读