【发布时间】:2013-04-21 04:01:32
【问题描述】:
我想尝试建立一个非常小的 Makefiles 系统。我有以下设置,但有些地方不太正确(这是通过阅读一些关于该主题的 SO 帖子拼凑而成的,虽然有点特定于项目,还有一些网站。我一定没有抓住一些基本的东西来拥有一个“ Makefile”调用子makefile。
这甚至比在不同的子目录中拥有主 Makefile 调用文件更简单。以下是我准备的以下文件:
生成文件:
全部: $(MAKE) -f ./make_system.mk $(MAKE) -f ./make_crc.mkmake_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)
水槽:sink.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。否则,您会看到相应的输出“无事可做”。这是我以前知道的,但这次忽略了(简单检查:只需查看您的目录,您就会看到环境/目录中有可执行文件)。
【问题讨论】:
-
您遇到了什么问题?对我来说这看起来不错。
-
当您说“单个 makefile ......当它们自己被命名为“Makefile”时工作正常,但是”,你的意思是当它们被调用为“make -f make_system.mk”时它们不起作用" 和 "make -f make_crc.mk"?
-
我已经更新了我上面的帖子,所以你可以看到我得到的输出。当我输入标签“all”时它似乎不起作用,即使在两个子makefile中也是如此。我选择将每个子makefile 从“Makefile”(它们最初被称为)重命名为“some_descriptive_name.mk”,然后将新的主makefile 命名为“Makefile”。在执行这个新的系统之前,我确实输入了“make clean”。