1

我想尝试建立一个非常小的 Makefiles 系统。我有以下设置,但有些地方不太正确(这是通过阅读一些关于该主题的 SO 帖子拼凑而成的,虽然有点特定于项目,还有一些网站。我一定没有抓住一些基本的东西来拥有一个“ Makefile”调用子makefile。

这甚至比在不同的子目录中拥有主 Makefile 调用文件更简单。以下是我准备的以下文件:

生成文件:

全部:
    $(MAKE) -f ./make_system.mk
    $(MAKE) -f ./make_crc.mk

make_system.mk:

G = -g ## 调试选项
CC = gcc ## 编译器
SRCS = source.c sink.c gateway.c
EXES = 源宿网关
OBJS = source.o sink.o gateway.o
CFLG =
LFLG =
LIB = #-lsocket -lnsl -lpthread

全部:$(EXES)

%.o: %.c %.h $(CC) -c $G $(CFLG) $<

来源:source.o $(CC) -o source source.o $(LIB) $(LFLG)

水槽:水槽.o $(CC) -o sink sink.o $(LIB) $(LFLG)

网关:gateway.o $(CC) -o 网关 gateway.o $(LIB) $(LFLG)

干净的: /bin/rm -f 核心 *.o $(EXES) *~

make_crc.mk:

CC = gcc
CFLAGS = -g
LFLAGS =
HDR = crcmode.h
SRC = crcmodel.c crctest.c
OBJ = crcmodel.o crctest.o
EXE = crctest

全部:$(EXE)

%.o: %.c %.h $(CC) -c $(CLFAGS) $<

$(EXE): $(OBJ) $(CC) $(LFLAGS) $(OBJ) -o $(EXE)

干净的: /bin/rm -f *.o *~ 核心 $(EXE)

我将如何设置 Makefile 来调用较小的子 makefile(*.mk 类型)?这是使用更大规模 makefile 系统的基本但重要的第一步(有手册可供参考,尽管我认为它没有明确的基本示例)。如果这样做的人可以向我展示一个小的 Makefile 小插图,我们将不胜感激(同样,这个 makefile 系统可以存在于同一个本地目录中)。

注意:单独的makefile“make_system”和“make_crc”在它们本身被命名为“Makefile”时可以正常工作,但我想尝试将它们称为具有单个整体Makefile的单独的子makefile。

附录(下面的解决方案):一旦我实现了如下所示的 Carl 解决方案,我意识到您需要始终包含某种形式的“make clean”,或者至少在调用 Makefile 之前在命令行中输入 at。否则,您会看到相应的输出“无事可做”。这是我以前知道的,但这次忽略了(简单检查:只需查看您的目录,您就会看到环境/目录中有可执行文件)。

4

1 回答 1

1

如果你想“转发”目标,你需要明确地做到这一点。像这个例子这样的东西应该可以工作(虽然我现在不能轻松测试,抱歉):

default: all 
%:
    $(MAKE) -f ./make_system.mk $@
    $(MAKE) -f ./make_crc.mk $@
于 2013-04-21T14:44:31.520 回答