【輕知識(shí)】閱讀apue(《UNIX環(huán)境高級(jí)編程》)入門橄碾,Makefile文件編寫

中文 第三版

入門

閱讀由境,能看懂。但是代碼不敲一下拼卵。感覺缺點(diǎn)什么奢浑。

比如以第10頁的 出錯(cuò)處理代碼為例。

#include "apue.h"
#include<errno.h>
#include<string.h>

int main(int argc, char *argv[]) {
    fprintf(stderr, "EACCSS: %s\n", strerror(EACCES));
    errno = ENOENT;
    perror(argv[0]);
    return 0;
}

apue.h 是書中代碼包里面的一個(gè)頭文件腋腮。你不下載雀彼。你可以#include<stdio.h>。我是為了保持一致就down了一份即寡。照著源碼的目錄放了徊哑。自己練習(xí)保持一致。

../apue
├── include
│   └── apue.h
└── intro
    ├── Makefile
    └── testerror.c

像我這對(duì)gcc參數(shù)都不大知曉的聪富。上來直接對(duì) testerror.c 莺丑。gcc testerror.c -o testerror 就報(bào)錯(cuò)了。

?  intro gcc testerror.c -o testerror
testerror.c:1:10: fatal error: 'apue.h' file not found
#include "apue.h"
         ^~~~~~~~
1 error generated.

其實(shí)找不到頭文件墩蔓。那需要指定目錄梢莽。改成:

gcc testerror.c -I../include -o testerror

makefile 的編寫

每次都要敲這么長的命令。多麻煩奸披。

testerror:testerror.o
    gcc testerror.o -o testerror
testerror.o:testerror.c
    gcc testerror.c -I../include -c -Wall -g -o testerror.o
clean:
    rm *.o testerror

精簡

OBJS=testerror.o
CC=gcc
CFLAGS+=-I../include -c -Wall -g
testerror:$(OBJS)
    $(CC) $(OBJS) -o testerror
testerror.o:testerror.c
    $(CC) testerror.c $(CFLAGS) -o testerror.o
clean:
    $(RM) *.o testerror

再精簡

OBJS=testerror.o
CC=gcc
CFLAGS+= -I../include -c -Wall -g
testerror:$(OBJS)
    $(CC) $^ -o $@
testerror.o:testerror.c
    $(CC) $^ $(CFLAGS) -o $@
clean:
    $(RM) *.o testerror

精簡

OBJS=testerror.o
CC=gcc
CFLAGS+=-I../include -c -Wall -g
testerror:$(OBJS)
    $(CC) $^ -o $@
%.o:%.c
    $(CC) $^ $(CFLAGS) -o $@
clean:
    $(RM) *.o testerror

如果看不懂昏名。請(qǐng)看下參考資料。

再看下書中源碼包的intro目錄阵面。目錄下也有一個(gè)makefile文件轻局。人家的源碼文件可以生成多個(gè)洪鸭。然后參考這個(gè)makefile文件。我們改造下自己的仑扑。

ROOT=..
CC=gcc
CFLAGS+= -I$(ROOT)/include -c -Wall -g 
PROGS = testerror

all: $(PROGS)
$(PROGS):%:%.o
    $(CC) $^ -o $@
%.o:%.c
    $(CC) $^ $(CFLAGS) -o $@
clean:
    $(RM) $(PROGS) *.o

上面的Makefile文件览爵。都是先生成目標(biāo)文件.o文件。然后再鏈接夫壁。其實(shí)Makefile可以簡化成拾枣。

ROOT=..
CC=gcc
CFLAGS+= -I$(ROOT)/include 
PROGS = testerror

all: $(PROGS)
%:%.c
    $(CC) $^ $(CFLAGS) -o $@
clean:
    $(RM) $(PROGS) *.o

如上沃疮,看起來跟apue源碼包intro目錄下的Makefile 有點(diǎn)相似了盒让。

ok,再練習(xí)另一個(gè)程序(1.8小節(jié):用戶標(biāo)識(shí))司蔬。

#include "apue.h"

int main(void)
{
    printf("uid = %d, gid = %d\n", getuid(), getgid());
    return 0;
}

我們只需要把uidgid 放到Makefile文件里面邑茄。

ROOT=..
CC=gcc
CFLAGS+= -I$(ROOT)/include 
PROGS = testerror uidgid

all: $(PROGS)
%:%.c
    $(CC) $^ $(CFLAGS) -o $@
clean:
    $(RM) $(PROGS) *.o

make 一下就編譯出來了uidgid。

參考資料:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俊啼,一起剝皮案震驚了整個(gè)濱河市肺缕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌授帕,老刑警劉巖同木,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跛十,居然都是意外死亡彤路,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門芥映,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洲尊,“玉大人,你說我怎么就攤上這事奈偏∥豚郑” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵惊来,是天一觀的道長丽涩。 經(jīng)常有香客問我,道長裁蚁,這世上最難降的妖魔是什么内狸? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮厘擂,結(jié)果婚禮上昆淡,老公的妹妹穿的比我還像新娘。我一直安慰自己刽严,他們只是感情好昂灵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布避凝。 她就那樣靜靜地躺著,像睡著了一般眨补。 火紅的嫁衣襯著肌膚如雪管削。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天撑螺,我揣著相機(jī)與錄音含思,去河邊找鬼。 笑死甘晤,一個(gè)胖子當(dāng)著我的面吹牛含潘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播线婚,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遏弱,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了塞弊?” 一聲冷哼從身側(cè)響起漱逸,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎游沿,沒想到半個(gè)月后饰抒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诀黍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年袋坑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔗草。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咒彤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咒精,到底是詐尸還是另有隱情镶柱,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布模叙,位于F島的核電站歇拆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏范咨。R本人自食惡果不足惜故觅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渠啊。 院中可真熱鬧输吏,春花似錦、人聲如沸替蛉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至它浅,卻和暖如春译柏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姐霍。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鄙麦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镊折。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓胯府,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腌乡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盟劫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 《鳥哥的Linux私房菜》筆記 提到Linux夜牡,就不得不提GNU和GPL授權(quán)所產(chǎn)生的自由軟件(free softw...
    Zhang21閱讀 12,567評(píng)論 0 15
  • 1 簡介 Makefile是用來完成構(gòu)建与纽,編譯整個(gè)工程文件的工具。所以塘装,Makefile定義了一系列的規(guī)則急迂,按照這...
    wit_yuan閱讀 964評(píng)論 0 1
  • 當(dāng)我們寫好程序后,需要通過編譯蹦肴,鏈接后生成可執(zhí)行文件僚碎,這個(gè)可執(zhí)行文件也就是我們通常說的程序。那么什么是編譯阴幌,什么是...
    程序大飛閱讀 30,742評(píng)論 3 24
  • 最近工作編譯程序一直在用別人寫的Makefile勺阐,但是沒有系統(tǒng)的學(xué)習(xí)過,趁著放假學(xué)一波 0x00 Makefile...
    MachinePlay閱讀 1,133評(píng)論 0 0
  • 7月12日上午10:30-12:00 今天是啟蒙班第3次正式上課 訓(xùn)練內(nèi)容:球感訓(xùn)練+正手攻球+步伐練習(xí) 訓(xùn)練效果...
    3d1d413d9358閱讀 162評(píng)論 0 0