我想尝试建立一个非常小的 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。否则,您会看到相应的输出“无事可做”。这是我以前知道的,但这次忽略了(简单检查:只需查看您的目录,您就会看到环境/目录中有可执行文件)。