gpt4 book ai didi

c - 在 C 中使用 Makefile 处理多个文件

转载 作者:行者123 更新时间:2023-11-30 17:14:18 25 4
gpt4 key购买 nike

我有 6 个文件:

guiGame.c, which include guiGame.h
guiGame.h, include minimax.h,listutils.h
minimax.c, include minimax.h
minimax.h, include listutils.h
listutils.c, include listutils.h

我在 Visual Studio 中构建了它,我需要在 Linux 上运行它。我试图搜索如何为它们构建 makefile,但我没有成功构建出有效的东西;包含的东西对我来说永远不起作用。

有人可以告诉我需要在每个 X:<files> 中写什么吗?线?

谢谢。

最佳答案

基础知识:

SRCS = guiGame.c minimax.c listutils.c
HDRS = guiGame.h minimax.h listutils.h

PROG = guiGame
OBJS = ${SRCS:.c=.o}

DEBRIS = a.out core *~
RM_F = rm -f

all: ${PROG}

${PROG}: ${OBJS}
${CC} -o $@ ${CFLAGS} ${OBJS} ${LDFLAGS} ${LDLIBS}

clean:
${RM_F} ${OBJS} ${PROG} ${DEBRIS}

剩下的问题是如何正确地获取依赖项。目标文件取决于它们包含的 header 。悲观但简单的版本是:

${OBJS}: ${HDRS}

它可以工作,但这意味着如果您更改guiGame.hlistutils.o将被重新编译,否则不需要。

有多种工具可以自动处理依赖项。 mkdepmkdepend 是两个;您还可以研究 gcc 的选项。

请注意,命令行(以 ${CC}${RM_F} 开头)由制表符缩进,而不是空格。这一点至关重要。

变量LDFLAGS用于指定库位置(主要)。变量 LDLIBS 允许您指定库。在命令行上,目标文件位于库之前;库标志可以放置在任何地方。

我通常从各个部分构建 CFLAGS:

WFLAG1 = -Wall
WFLAG2 = -Wextra
WFLAG3 = -Wmissing-prototypes
WFLAG4 = -Wstrict-prototypes
WFLAG5 = -Wold-style-definition
WFLAG6 = -Werror
WFLAGS = ${WFLAG1} ${WFLAG2} ${WFLAG3} ${WFLAG4} ${WFLAG5} ${WFLAG6}
SFLAGS = -std=c11
GFLAGS = -g
OFLAGS = -O3
UFLAGS = # Set on command line
IFLAG1 = -I${HOME}/inc
IFLAGS = ${IFLAG1}

CFLAGS = ${OFLAGS} ${GFLAGS} ${IFLAGS} ${SFLAGS} ${WFLAGS} ${UFLAGS}

这允许我调整 make 命令行上的任何选项。大多数人并不那么挑剔(小心?)。请注意,GFLAGS 历史上用于 SCCS get 命令的标志 - 您可能会因回收它而搞砸一些东西,但您可能不会。

关于c - 在 C 中使用 Makefile 处理多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com