我有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>
行需要写什么吗?
感谢。
答案 0 :(得分:0)
基础知识:
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
命令的标志 - 您可能通过回收它来搞砸了,但您可能不会。