最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本編程Makefile的使用

 更新時(shí)間:2022年03月09日 09:14:28   作者:CAccept  
本文主要介紹了shell腳本編程Makefile的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

為什么要使用Makefile

簡單來說,當(dāng)我們寫一個(gè)稍微大一些項(xiàng)目的時(shí)候,如果我們要執(zhí)行一個(gè)程序那得編譯很多個(gè)文件并且還得鏈接起來,如果沒有Makefile我們就得一個(gè)一個(gè)編譯一個(gè)一個(gè)鏈接那真的是又臭又長(而且還會(huì)經(jīng)常寫錯(cuò)),而Makefile就能夠很好的解決這個(gè)問題,所以說掌握好Makefile的編寫是很有必要的

Makefile的編寫

程序的編譯和鏈接

使用C、C++編寫可執(zhí)行程序,首先要把源文件編譯成中間代碼文件,Linux下是 .o 文件,即 Object File,這個(gè)動(dòng)作叫做編譯(compile)。然后再把大量的Object File合成執(zhí)行文件,這個(gè)動(dòng)作叫作鏈接(link)。

一個(gè)項(xiàng)目,擁有成百上千的源程序文件,編譯鏈接這些源文件都是由規(guī)則的,Makefile閃亮登場!Makefile確定整個(gè)工程的編譯規(guī)則,只需要一個(gè)make命令,就可以實(shí)現(xiàn)“自動(dòng)化編譯”。make是一個(gè)解釋makefile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個(gè)命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

Make 工作原理

通常在一個(gè)項(xiàng)目里,我們的規(guī)則是:
1)如果這個(gè)工程沒有編譯過,那么我們的所有C文件都要編譯并被鏈接。
2)如果這個(gè)工程的某幾個(gè)C文件被修改,那么我們只編譯被修改的C文件,并鏈接目標(biāo)程序。
3)如果這個(gè)工程的頭文件被改變了,那么我們需要編譯引用了這幾個(gè)頭文件的C文件,并鏈接目標(biāo)程序。

其實(shí)就是智能的識(shí)別哪些編譯鏈接需要做,哪些不用做避免不必要的時(shí)間消耗

只要我們的Makefile寫得夠好,我們只用一個(gè)make命令就可以完成,make命令會(huì)自動(dòng)智能地根據(jù)當(dāng)前的文件修改的情況來確定哪些文件需要重編譯,從而自己編譯所需要的文件和鏈接目標(biāo)程序。

Makefile的規(guī)則

target … : prerequisites …

command

target:也就是一個(gè)目標(biāo)文件,可以是ObjectFile,也可以是執(zhí)行文件。還可以是一個(gè)標(biāo)簽(Label),對(duì)于標(biāo)簽這種特性,暫不敘述。

prerequisites:要生成那個(gè)target所需要的文件或是目標(biāo)。

command:也就是make需要執(zhí)行的命令。(任意的Shell命令)

這是一個(gè)文件的依賴關(guān)系,也就是說,target這一個(gè)或多個(gè)的目標(biāo)文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。說白一點(diǎn)就是說,prerequisites中如果有一個(gè)以上的文件比target文件要新的話,command所定義的命令就會(huì)被執(zhí)行。這就是Makefile的規(guī)則。也就是Makefile中最核心的內(nèi)容。

一個(gè)范例:

hello_demo : hellospeak.o speak.o   //由hellospeak.o speak.o鏈接成目標(biāo)hello_demo                                  
        gcc -o hello_demo hellospeak.o speak.o  //執(zhí)行下面的命令                               

hellospeak.o : hellospeak.c speak.h  //如果一些hellospeak.c的函數(shù)聲明是在頭文件speak.h中那么也得在這后面加上                                         
        gcc -c hellospeak.c                                                
speak.o : speak.c  speak.h                                                  
        gcc -c speak.c                                                    
clean :                                                                  
        rm hello_demo speak.o  hellospeak.o  //當(dāng)執(zhí)行make clean時(shí)就會(huì)執(zhí)行這個(gè)語句 

下面是我寫的整體例子

//speak.h
#include<stdio.h>
#include<stdlib.h>
void helloSpeak();
--------------------------------------------------------------




//speak.c
#include"speak.h"
void helloSpeak()
{
 printf("Hello Makefile\n");
}
--------------------------------------------------------------




//main.c
#include"speak.h"
int main()
{
  helloSpeak();
  return 0;
}



--------------------------------------------------------------
//Makefile
Hello: main.o speak.o
        gcc -o Hello  main.o speak.o
main.o: main.c speak.h
        gcc -c main.c
speak.o: speak.c speak.h
        gcc -c speak.c
clean:
        rm Hello speak.o main.o

~

運(yùn)行效果??

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

 到此這篇關(guān)于shell腳本編程Makefile的使用的文章就介紹到這了,更多相關(guān)shell Makefile內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用模板的方式創(chuàng)建守護(hù)進(jìn)程代碼實(shí)例

    用模板的方式創(chuàng)建守護(hù)進(jìn)程代碼實(shí)例

    用模板的方式創(chuàng)建守護(hù)進(jìn)程,只需要定義一個(gè)與int work(int argc,char **argv)相同的偽入口函數(shù)傳入start_domain()函數(shù)即可
    2013-12-12
  • 強(qiáng)制刪除rpm包的方法

    強(qiáng)制刪除rpm包的方法

    本文給大家介紹強(qiáng)制刪除rpm包,對(duì)rpm包刪除方法感興趣的朋友可以一起學(xué)習(xí)
    2015-11-11
  • 如何在Linux下修改Mysql的用戶(root)密碼

    如何在Linux下修改Mysql的用戶(root)密碼

    這篇文章主要介紹了如何在Linux下修改Mysql的用戶(root)密碼,分兩種情況:第一種當(dāng)擁有原來的mysql的root密碼,第二種情況忘記原來的mysql的root的密碼,需要的朋友可以參考下
    2015-08-08
  • 更改linux用戶登錄shell的操作方法

    更改linux用戶登錄shell的操作方法

    這篇文章主要為大家分享了更改linux用戶登錄shell的方法,感興趣的朋友可以參考下
    2013-11-11
  • Shell腳本實(shí)現(xiàn)檢測文件是否被修改過代碼分享

    Shell腳本實(shí)現(xiàn)檢測文件是否被修改過代碼分享

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)的檢測文件是否被修改代碼分享,其實(shí)了解了原理就可以做很多事了,需要的朋友可以參考下
    2014-09-09
  • 詳解Shell $*和$@之間的區(qū)別

    詳解Shell $*和$@之間的區(qū)別

    這篇文章主要介紹了詳解Shell $*和$@之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 查找目錄下同名但不同后綴名文件的shell腳本代碼

    查找目錄下同名但不同后綴名文件的shell腳本代碼

    這個(gè)腳本可以實(shí)現(xiàn)指定目錄下同名但不同后綴名的查找,可以拓展為刪除指定的文件的腳本,覺得很實(shí)用,分享一下
    2013-02-02
  • Linux bc命令實(shí)現(xiàn)數(shù)學(xué)計(jì)算器

    Linux bc命令實(shí)現(xiàn)數(shù)學(xué)計(jì)算器

    這篇文章主要介紹了Linux bc命令實(shí)現(xiàn)數(shù)學(xué)計(jì)算器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • linux命令詳解之chkconfig命令使用方法

    linux命令詳解之chkconfig命令使用方法

    chkconfig命令主要用來更新(啟動(dòng)或停止)和查詢系統(tǒng)服務(wù)的運(yùn)行級(jí)信息。謹(jǐn)記chkconfig不是立即自動(dòng)禁止或激活一個(gè)服務(wù),它只是簡單的改變了符號(hào)連接,下面看一下它是如何使用的
    2014-01-01
  • linux下passwd命令設(shè)置修改用戶密碼的方法

    linux下passwd命令設(shè)置修改用戶密碼的方法

    下面小編就為大家?guī)硪黄猯inux下passwd命令設(shè)置修改用戶密碼的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評(píng)論

日喀则市| 福清市| 富川| 昌平区| 罗山县| 岳阳县| 靖远县| 清水河县| 屯门区| 扎鲁特旗| 囊谦县| 阳江市| 眉山市| 嘉兴市| 景东| 耿马| 铅山县| 亚东县| 简阳市| 宁晋县| 金乡县| 澎湖县| 澄迈县| 铜川市| 秭归县| 南投县| 沙田区| 民和| 灯塔市| 普兰店市| 西华县| 嘉祥县| 富锦市| 蒙城县| 盘锦市| 时尚| 曲周县| 板桥市| 九龙城区| 六枝特区| 平谷区|