make make时出错:mingw32-make:***没有规则来制作目标

问题描述 投票:0回答:1

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

c makefile build mingw32
1个回答
0
投票

你大多在那里。你只需要一个简单的规则来将.c编译成.o,就像

.c.o:$(CC)$(INCLUDES)-c $ <

使用通配符的依赖性是可以的。

© www.soinside.com 2019 - 2024. All rights reserved.