[英]Using Makefile in C with more than one file
我有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}
剩余的問題是使依賴關系正確。 目標文件取決於它們包含的標題。 悲觀但簡單的版本是:
${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
命令的標志-您可以通過回收它來GFLAGS
某些東西,但可能不會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.