亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

第五課 Makefile文件的制作(補充)

2024-06-28 13:25:16
字體:
來源:轉載
供稿:網友
第五課 Makefile文件的制作(補充)序言:

  前面的幾節課講解Makefile的一些基本知識也做了一些小例子實踐了幾下,那么到現在普通的練習則是沒有問題。但是如果做項目文件較多又分層次等等還是會碰上好多問題的,這節課補充一些知識。

知識點:

  1.makefile的內嵌函數;

  2.二級目錄Makefile的編寫;

  3.多級目錄Makefile的編寫;

原理:

  GNU make還提供了相關的函數來幫助我們編寫此文件,使得我們在編寫makefile文件時更加靈活健壯。提供的函數大致分為有:處理文件名、文本內容、變量、命令四種;在這節中不會講太多的函數甚至連最基本的去空格、排序、過濾功能函數也不會,只需要幾個就可以了。有了這些函數就能幫我們很好的處理具有二級多級目錄文件的編譯工作。

  make函數接下來講解幾個常用的函數。

實踐:  1.內嵌函數

  1.1 函數的調用格式類似于變量的引用用$開始,具體如下:

$(FUNCTION ARGUMENTS)#也可以是如下:${FUNCTION ARGUMENTS}

  這里需要注意下:FUNCTION則是make內嵌的函數名稱,如果是用戶自己的需要用call間接調用;ARGUMENTS則是函數的參數多個使用都好分隔,所以參數中不能有都好分隔否則出錯。

  1.2 常見的幾個

    1.2.1 $(wildcard PATTERN):列出當前目錄下匹配的文件、文件夾;例如列出當前目錄下的所有目標.o文件:src=$(wildcard *.o)。

    1.2.2$(patsubst PATTERN,REPLACEMENT,TEXT):在TEXT文本中符合PATTERN模式的講替換成REPLACEMENT,例如把推導出calc.o,calcmain.o其calc.c和calcmain.c:

OBJECTS=calc.o calcmain.o$(patsubst %.o,%.c,$(OBJECTS))  #(OBJECTS:.o=.c)也可以用

    1.2.3$(shell 命令):執行shell命令,例如執行列出當前目錄的所有文件夾:

$(shell ls -d */)

    1.2.4$(findstring FIND,IN):在IN字符串里面查找FIND字符,如果存在則返回FIND,否則返回為空;

$(findstring a,abcd) #存在返回a

  2. Makefile文件支持二級目錄

    2.1 先建立環境,看如下代碼:

mkdir gcc04cd gcc04mkdir ui   #界面代碼庫   mkdir dal    #數據訪問庫mkdir bll    #業務邏輯庫cd uitouch ui.c ui.hcd ../daltouch dal.c dal.hcd ../blltouch bll.c bll.h 

  在對ui、dal、bll模塊下編寫一些簡單的測試代碼:

#ui.c文件#include <stdio.h>#include "ui.h"void PRint_UI(const char* str){      printf(str);   }#ui.h文件#ifndef _UI_H#define _UI_Hvoid print_UI(const char* str);#endif#dal.c文件#include <stdio.h>#include "dal.h"void print_DAL(const char* str){      printf(str);   }#dal.h文件#ifndef _DAL_H#define _DAL_Hvoid print_DAL(const char* str);#endif#bll.c文件#include <stdio.h>#include "bll.h"void print_BLL(const char* str){      printf(str);   }#bll.h文件#ifndef _BLL_H#define _BLL_Hvoid print_BLL(const char* str);#endif

  下面看下Makefile文件:

CC=gccCFLAGS=-Wall -gBIN=mainSUBDIR=$(shell ls -d */)ROOTSRC=$(wildcard *.c)ROOTOBJ=$(ROOTSRC:%.c=%.o)SUBSRC=$(shell find $(SUBDIR) -name '*.c')SUBOBJ=$(SUBSRC:%.c=%.o)$(BIN):$(ROOTOBJ) $(SUBOBJ)    $(CC) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ).c.o:    $(CC) $(CFLAGS) -c $< -o $@clean:    rm -f $(BIN) $(ROOTOBJ) $(SUBOBJ)

  上面通過幾個函數跟推導寫出來的Makefile文件,至于其意思前面也有相對應的解析了,這個

SUBDIR變量也注意下它是當前目錄下目錄的集合后面通過find命令查找出這些對于目錄下的.c文件;  上面的代碼只能支持到二級目錄,代碼是由SUBDIR決定了它只找到了二級目錄的文件!現在想想如果是二級目錄下還有目錄即是多級目錄Makefile編寫(也可以是Makefile生成多個可執行文件)那怎么辦呢,有什么辦法了解決呢?這里就需要用到一個命令:make bll/ TARGET=all ;其中all是可執行文件或是偽目標。下面看看二級目錄的Makefile文件的編寫:
SUBDIRS=test    #定義二級目錄.PHONY:default all clean $(SUBDIRS)    #定義多個偽目標default:all     #這個相當于每月作用后面沒命令all clean:     #all 或是 clean 就執行下面命令,但是是沒有依賴文件,也就是直接執行命令     $(make) $(SUBDIRS) TARGET=$@      #這句相當于:make test TARGET=all$(SUBDIRS)    #     $(make) -C $@ $(TARGET)     #進入文件夾傳遞all調用Makefile,命令其實就是:make -C test/Makefile all

  test目錄下的Makefile文件:

CC=gccBIN=testOBJS=test.oCFLAGS=-Wall -g.PHONE: all clean print    #傳遞allall:print $(BIN)           #目的是打印信息print:      @echo "make in $(BIN)......"$(BIN):$(OBJS)       $(CC) $(OBJS) -o $@.o:.c        $(CC) -c $<clean:        @echo "rm......"        rm -f $(BIN) #(OBJS)

  相信這個代碼都能明白了,下面的就不注釋比較簡單跟之前的一樣。這個在進入跟退出文件夾時會有輸出這樣在看起來高大上哦?。。?/p>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品自拍小视频| 精品国产91久久久| 成人午夜在线视频一区| 国产日韩换脸av一区在线观看| 亚洲成人av在线播放| 久久久久九九九九| 欧美成人性生活| 高清一区二区三区日本久| 日韩视频―中文字幕| 欧美老女人xx| 成人性生交大片免费看小说| 成人精品视频99在线观看免费| 操91在线视频| 亚洲最大的免费| 国产亚洲精品久久久| 亚洲综合在线小说| 色综合久久久久久中文网| 自拍亚洲一区欧美另类| 久久天堂电影网| 亚洲欧美国产日韩天堂区| 日韩中文字幕在线精品| 国产视频福利一区| 91超碰caoporn97人人| 国产精品福利无圣光在线一区| 久久久久久久网站| 亚洲色图第三页| 久久精品国产电影| 国产主播在线一区| 亚洲精品白浆高清久久久久久| 亚洲国产成人精品女人久久久| 欧美在线视频观看| 欧美大片网站在线观看| 久久视频在线看| 91亚洲人电影| 91精品免费看| 2021久久精品国产99国产精品| 日韩高清电影免费观看完整版| 久热精品在线视频| 粉嫩av一区二区三区免费野| 久久夜色精品国产| 色在人av网站天堂精品| 国产精品永久免费观看| 91九色综合久久| 一本一本久久a久久精品牛牛影视| 欧美精品电影免费在线观看| 久久精品视频免费播放| 亚洲人成电影网站色…| 国产一区二区成人| 国产精品xxxxx| 最近的2019中文字幕免费一页| 日韩福利视频在线观看| 日韩大片免费观看视频播放| 97在线观看视频国产| 92福利视频午夜1000合集在线观看| 国产成人自拍视频在线观看| 国产精品视频在线观看| 91精品视频网站| 精品久久久久国产| 91系列在线播放| 97在线免费观看| 日韩av快播网址| 亚洲最大福利网| 在线日韩精品视频| 三级精品视频久久久久| 久久久久久国产精品| 日韩一区二区欧美| 97国产一区二区精品久久呦| 最新的欧美黄色| 国产一区二区香蕉| 日韩在线免费av| 欧美电影免费观看网站| 国产精品精品国产| 国产99久久精品一区二区永久免费| 亚洲国产成人精品电影| 免费99精品国产自在在线| 国产精品久久精品| 懂色av影视一区二区三区| 国产精品aaa| 97不卡在线视频| 一本大道亚洲视频| 国内精品久久久久| 色偷偷av一区二区三区乱| 国产精品激情av在线播放| 91久久精品国产91性色| 亚洲女人被黑人巨大进入al| 中文字幕欧美精品日韩中文字幕| 欧美一级高清免费播放| 欧美亚洲国产另类| 成人欧美在线观看| 91国产视频在线| 精品国产老师黑色丝袜高跟鞋| 久久视频在线视频| 日韩在线高清视频| 国产在线观看精品一区二区三区| 97国产精品视频人人做人人爱| 久久久免费高清电视剧观看| 精品国产乱码久久久久久虫虫漫画| 亚洲美女性生活视频| 96精品视频在线| 影音先锋欧美在线资源| 亚洲一区二区三区乱码aⅴ| 久久久久久网站| 欧美性xxxxx极品| 国产精品吹潮在线观看| 另类少妇人与禽zozz0性伦| 国产香蕉精品视频一区二区三区| 久久久久成人精品| 久久久久日韩精品久久久男男| 亚洲一区二区免费在线| 日韩欧美一区二区三区久久| 在线成人一区二区| 午夜精品一区二区三区在线视频| 精品久久久久久久久中文字幕| 色综合久综合久久综合久鬼88| 欧美激情在线观看视频| 国产精品中文字幕在线观看| 91欧美激情另类亚洲| 国产精品高潮呻吟视频| 国产成人精品av在线| 欧美午夜www高清视频| 欧美在线免费观看| 午夜精品久久久久久久99黑人| 国产精品中文字幕在线观看| 韩国欧美亚洲国产| 国产91精品高潮白浆喷水| 久久久久久久久久婷婷| 日本国产一区二区三区| 欧美特黄级在线| 久久九九全国免费精品观看| 97在线视频免费看| 精品亚洲aⅴ在线观看| 欧美亚洲另类制服自拍| 亚洲色图色老头| 欧美在线www| 欧美日韩国产中文字幕| 青草青草久热精品视频在线观看| 最近2019年手机中文字幕| 亚洲美女视频网| 成人午夜黄色影院| 欧美尤物巨大精品爽| 91免费的视频在线播放| 日本不卡免费高清视频| 欧美在线激情网| 久久综合伊人77777尤物| 成人网在线免费观看| 精品久久久久人成| x99av成人免费| 欧美午夜精品久久久久久浪潮| 国产成人综合久久| 欧美日韩综合视频| 麻豆国产va免费精品高清在线| 茄子视频成人在线| 国产精品99久久久久久久久久久久| 久久久久亚洲精品国产| 久久精品国产欧美亚洲人人爽| 国产一区二区黑人欧美xxxx| 欧美日韩一区二区免费视频| 欧美黑人国产人伦爽爽爽| 亚洲最大激情中文字幕| 日韩中文字幕在线| 久久国产精品影视| 亚洲高清久久网| 亚洲欧洲在线播放| 欧美在线亚洲一区|