如何編譯程式?

假設欲編譯的原始程式檔名為hw1cli.c。欲將其編譯成可執行檔 hw1cli,請用下列指令:

${CC} ${CFLAGS} hw1cli.c -o hw1cli ${LIBS}
其中${CC}, ${CFLAGS}, 與 ${LIBS}的定義與所使用的 Unix 系統有關。 如果你已安裝成功 unpv13e, 則這些巨集的定義可在 unpv13e 目錄下的 Make.defines 檔案中找到。以 ubuntu 為例, 其 Make.defines 中有以下內容:

CC = gcc
CFLAGS = -I../lib -g -O2 -D_REENTRANT -Wall
LIBS = ../libunp.a -lpthread
故可知我們要用下列指令來編譯

gcc -I../lib -g -O2 -D_REENTRANT -Wall hw1cli.c -o hw1cli ../libunp.a -lpthread

在 SunOS 中, Make.defines 檔案內容可能如下:


CC = gcc
CFLAGS = -g -O2 -D_REENTRANT -Wall -D__EXTENSIONS__
LIBS = ../libunp.a -lresolv -lsocket -lnsl -lpthread
故要用下列指令來編譯

gcc -g -O2 -D_REENTRANT -Wall -D__EXTENSIONS__ hw1cli.c -o hw1cli ../libunp.a -lresolv -lsocket -lnsl -lpthread

使用 make

如果你嫌每次都要輸入上述冗長的編譯指令很麻煩,也可以透過修改程式所在目錄的 Makefile檔減少後續的動作。 方法是用文字編輯器(命令列模式下的 vi 或 vim 或 GNOME 桌面下的 gedit )修改此程式所在目錄(假設是 tcpcliserv)中的 Makefile檔,在其中加入下列文字(此處假設你的程式 名稱是hw1cli.c)
hw1cli:	hw1cli.o
	${CC} ${CFLAGS} -o $@ hw1cli.o ${LIBS}
	
加入上述文字後將Makefile存檔,之後即可以用 make 指令編譯且連結出你的執行檔。如下面的執行範例
lhyen@lhyen-desktop:~/np/unpv13e/tcpcliserv$ make hw1cli
gcc -I../lib -g -O2 -D_REENTRANT -Wall   -c -o hw1cli.o hw1cli.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -o hw1cli hw1cli.o ../libunp.a -lpthread
	
上述藍色文字是在 Ubuntu 上執行時會出現的訊息,不同系統出現的訊息可能不同。編譯成功後此目錄中就有執行檔,檔名就是你C程式檔名去掉.c。在我們的例子中就是 hw1cli。

下面例子顯示的是修改在 tcpcliserv 目錄下的 Makefile, 使得之後可以用 make 編譯 hw2serv.c 這個程式。