簡體   English   中英

在C中與多個文件一起使用Makefile

[英]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

有多種工具可以自動處理依賴關系。 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命令的標志-您可以通過回收它來GFLAGS某些東西,但可能不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM