做make时出错:mingw32-make:***没有规则可以成为目标

时间:2019-04-25 23:34:37

标签: c makefile build mingw32

我必须创建一个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。

1 个答案:

答案 0 :(得分:0)

您几乎在那里。您只需要一个简单的规则即可将.c编译为.o,例如

.c.o:     $(CC)$(包含)-c $ << / p>

使用通配符的依赖关系还可以。