我有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>中需要写些什么吗?
谢谢。
发布于 2015-05-25 07:38:15
基础知识:
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}遗留的问题是如何正确地处理依赖关系。目标文件依赖于它们包含的头文件。悲观但简单的版本是:
${OBJS}: ${HDRS}它可以工作,但这意味着如果您更改guiGame.h,listutils.o将被重新编译,否则它不需要重新编译。
有各种工具可以自动处理依赖项。mkdep和mkdepend是两个;您还可以研究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命令的标志-您可能会通过回收来搞砸一些东西,但您可能不会这样做。
https://stackoverflow.com/questions/30401612
复制相似问题