精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Makefile文件的編寫規則及實例

CHANBAEK ? 來源:小浩筆記 ? 作者:一紙HH ? 2023-05-19 14:52 ? 次閱讀

Makefile帶來直接好處就是——“自動化編譯”。一旦寫好,只需要一個make命令,整個工程完全自動編譯,所以十分方便。而Makefile文件就是告訴make命令怎么樣地去編譯和鏈接程序。但是想要比較靈活的運用它,還是先要熟悉一些關于系統對程序編譯和鏈接的知識。

1.一個簡單的makefile例子

假設一個程序有兩個文件file1.c,file2.c,每個文件都包含head.h,生成file可執行文件

file:file1.o file2.o       附屬行(文件的依存關系)
    gcc -o file1.o file2.o    命令行
file1.o:file1.c head.h
    gcc -c file1.c
file2.o:file2.c head.h
    gcc -c file2.c

從file最終的目標文件開始倒推,依次列出文件的依存關系,make在執行時:

(1)判斷file可執行文件是否存在,若不存在,則執行命令行,向下尋找依存關系

(2)若file存在,則檢查依靠文件,是否存在更新,若存在更新則執行命令行,若沒有更新則給出提示:

make:'file' is up to date.

2.makefile中的宏定義及內部變量

宏定義:

OBJS = file1.o file2.o
CC = gcc
CFLAGS = -wall -O -g

引用:

file:$(OBJS)
    $(CC) $(OBJS) -o file
file1.o:file1.c head.h
    $(CC) $(FLAGS) -c file1.c
file2.o:file2.c head.h
    $(CC) $(FLAGS) -c file2.c

內部變量:

$^ 代表所有的依賴文件

$@ 代表所有的目標文件

$< 代表第一個依賴文件

file:$(OBJS)
    $(CC) $^ -o $@
file1.o:file1.c head.h
    $(CC) $(FLAGS) -c $< -o $@
file2.o:file2.c head.h
    $(CC) $(FLAGS) -c $< -o $@

"(CC) **(FLAGS) -c **< -o @"是隱含規則,可以不寫,默認使用此規則ww

3.假象

假設一個項目要生成兩個可執行文件file1和file2,這兩個文件是獨立的,則在makefile開始處:

all:file1 file2

make總是假設all要生成,去檢查它的依賴文件

4.清除由make產生的文件

clean:
    rm *.o
    rm file

執行:

make clean

則會清除由make生成的*.o和file文件

如果有clean文件存在,則清除不會執行(因clean沒有可依賴的文件,永遠是最新的)

使用PHONY目標,避免同名文件相沖突,不會檢查clean文件存在與否,都要執行清除操作

.PHONY : clean
clean:
    rm *.o   
     rm file

5.makefile函數

搜索當前目錄,生成由*.c結尾的文件列表,wildcard--函數名

SOURCE = $(wildcard *.c)

用%.o替換$(SOURCE)中的%.c文件

OBJS = $(patsubst %.c,%.o,$(SOURCE))

6.產生新規則

SOURCE = $(wildcard *.c)
depends:$(SOURCE)
    gcc -M $(SOURCE) > depends

(為每一個.c文件產生規則,c文件和相關頭文件為依靠)

在makefile文件中:

include depends

7.一個有效的makefile文件

可以完成大部分我們所需要的依靠檢查,不用做太多的修改就可用在大多數項目里

功能:搜索當前目錄,尋找源碼文件,放入SOURCE變量里,利用patsubst產生目標文件(*.o)

CC = gcc
CFLAGS = -Wall -O -g
 
SOURCE = $(wildcard *.c,*.cc)
OBJS = $(patsubst %.c,%.o,$(patsubst,%.cc,%.o,$(SOURCE)))
 
file:$(OBJS)
    $(CC) $^ -o $@

用默認規則產生目標文件(*.o)

(缺點:并未包含頭文件,當頭文件更新時,不能重新編譯)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 文件
    +關注

    關注

    1

    文章

    561

    瀏覽量

    24701
  • 程序
    +關注

    關注

    116

    文章

    3777

    瀏覽量

    80856
  • 命令
    +關注

    關注

    5

    文章

    678

    瀏覽量

    21987
  • 編譯
    +關注

    關注

    0

    文章

    654

    瀏覽量

    32811
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19163
收藏 人收藏

    評論

    相關推薦

    關于Makefile自動生成-autotools的使用

    在Linux應用開發中,編寫Makefile是一項必備技能,因為它定義了工程中所有文件的編譯順序、規則和依賴關系,決定了哪些文件需要編譯以及
    的頭像 發表于 07-25 15:50 ?1467次閱讀
    關于<b class='flag-5'>Makefile</b>自動生成-autotools的使用

    Makefile的引入及規則

    裸板程序的時候,使用Makefile組織管理這些程序,本節講解Makefile最基本的規則Makefile要做什么事情呢? 組織管理程序和文件
    發表于 04-11 17:37

    Makefile函數和實例分析

    首發平臺:微信公眾號baiwenkejiARM裸機1期加強版視頻課程配套WiKi第9課第7節Makefile函數和第8節Makefile實例。發現沒有?wiki.100ask.org 也有變化:多了
    發表于 04-25 11:03

    Makefile編寫

    的起始字符必須為TAB字符。如果DEPENDENCIES中有一個或多個文件更新的話,COMMAND就要執行,這就是Makefile最核心的內容。接下來就根據這個Makefile基本規則
    發表于 11-02 15:59

    什么是腳本? makefile編寫規則有哪些

    一、實驗目的和要求1了解什么是腳本2掌握shell編程方法3掌握makefile編寫規則二、實驗內容和原理1編寫一個Shell腳本,要求:顯示當前目錄的所有內容,并統計可執行
    發表于 12-22 07:52

    如何編寫makefile文件

    如何編寫makefile文件
    發表于 12-24 07:36

    怎樣去編寫makefile體系的規則

    為什么要學習makefilemakefile體系的工作原理是什么?怎樣去編寫makefile體系的規則呢?
    發表于 12-27 06:36

    makefile文件編寫方式

    文章圍繞makefile文件編寫方式,向讀者講述如何在ubuntu平臺上用交叉編譯鏈 arm-none-eabi- 編譯出 STM32F4xx 系列 MCU 的執行文件。文章核心在于
    發表于 02-07 06:47

    Linux內核Makefile文件

    Makefile文件的詳細編寫過程
    發表于 08-28 09:25 ?14次下載

    如何寫Makefile編譯匯編和C文件

    經常在一個項目中包含多個.c源文件,而且一個.c源文件包含了一堆的頭文件,這種情況下如何編寫makefile,使得能成功編譯整個項目?本博文
    發表于 11-24 09:03 ?1.4w次閱讀
    如何寫<b class='flag-5'>Makefile</b>編譯匯編和C<b class='flag-5'>文件</b>

    Makefile編寫實例程序和詳細資料免費下載

    本文檔的作用內容詳細介紹的是Makefile編寫實例程序和詳細資料免費下載。
    發表于 09-12 11:55 ?6次下載
    <b class='flag-5'>Makefile</b><b class='flag-5'>編寫實例</b>程序和詳細資料免費下載

    Linux關于Makefile的用法介紹

    Make可以從一個名為Makefile文件中獲得如何構建程序的知識,該文件列出了每個非源文件以及如何從其他文件計算它。當你
    發表于 12-24 10:36 ?1881次閱讀

    makefile都有哪些語法?

    中如果有一個以上的文件比target文件要新的話,command所定義的命令就會被執行。這就是Makefile規則。也就是Makefile
    的頭像 發表于 05-06 16:07 ?1462次閱讀

    Makefile是如何編譯代碼文件的?

    makefile文件最常用的作用是,告訴make程序,如何來編譯以及連接程序,最終生成可執行的二進制文件
    的頭像 發表于 05-18 15:27 ?4402次閱讀
    <b class='flag-5'>Makefile</b>是如何編譯代碼<b class='flag-5'>文件</b>的?

    Makefile可以做什么?Makefile的基本格式

    Makefile可以根據指定的依賴規則文件是否有修改來執行命令。常用來編譯軟件源代碼,只需要重新編譯修改過的文件,使得編譯速度大大加快。
    的頭像 發表于 01-25 11:18 ?656次閱讀