欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell腳本編程Makefile的使用

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

為什么要使用Makefile

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

Makefile的編寫

程序的編譯和鏈接

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

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

Make 工作原理

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

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

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

Makefile的規(guī)則

target … : prerequisites …

command

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

prerequisites:要生成那個target所需要的文件或是目標。

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

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

一個范例:

hello_demo : hellospeak.o speak.o   //由hellospeak.o speak.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  //當執(zhí)行make clean時就會執(zhí)行這個語句 

下面是我寫的整體例子

//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

~

運行效果??

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

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

相關文章

  • 五個常用的Linux監(jiān)控腳本代碼

    五個常用的Linux監(jiān)控腳本代碼

    為大家提供五個常用linux監(jiān)控腳本(查看主機網(wǎng)卡流量、系統(tǒng)狀況監(jiān)控、監(jiān)控主機的磁盤空間,當使用空間超過90%就通過發(fā)mail來發(fā)警告、監(jiān)控CPU和內(nèi)存的使用情況、全方位監(jiān)控主機),有需要的朋友不妨看看哦
    2013-02-02
  • shell腳本結(jié)合iptables防端口掃描的實現(xiàn)

    shell腳本結(jié)合iptables防端口掃描的實現(xiàn)

    這篇文章主要介紹了shell腳本結(jié)合iptables防端口掃描的實現(xiàn),中間使用了inotify-tools工具,需要的朋友可以參考下
    2014-05-05
  • 更改linux用戶登錄shell的操作方法

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

    這篇文章主要為大家分享了更改linux用戶登錄shell的方法,感興趣的朋友可以參考下
    2013-11-11
  • 讓代碼整潔、過程清晰的BASH Shell編程技巧

    讓代碼整潔、過程清晰的BASH Shell編程技巧

    這篇文章主要介紹了讓代碼整潔、過程清晰的BASH Shell編程技巧,特別是大型的Shell項目中,這10個經(jīng)驗之談可以幫助你寫出代碼整潔、過程清晰的代碼,需要的朋友可以參考下
    2014-07-07
  • shell腳本加密工具shc使用詳解

    shell腳本加密工具shc使用詳解

    Linux下的shell腳本用途廣泛,經(jīng)常包含IP、Pwd等關鍵信息,可讀可寫的特點很容易造成信息泄露,導致嚴重后果?;谶@些原因,對腳本實施加密便變得很有必要。本文介紹shell腳本加密工具應用場景分析,一起看看吧
    2021-06-06
  • linux awk時間計算腳本及awk命令詳解

    linux awk時間計算腳本及awk命令詳解

    這篇文章主要介紹了linux awk時間計算腳本及awk命令詳解的相關資料,需要的朋友可以參考下
    2015-11-11
  • Shell $[]對整數(shù)進行數(shù)學運算實現(xiàn)

    Shell $[]對整數(shù)進行數(shù)學運算實現(xiàn)

    本文主要介紹了Shell $[]對整數(shù)進行數(shù)學運算實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • ssh,scp自動登陸的實現(xiàn)方法

    ssh,scp自動登陸的實現(xiàn)方法

    這篇文章主要介紹ssh,scp自動登陸的實現(xiàn)方法,需要的朋友可以參考下
    2013-02-02
  • Linux命令行循環(huán)執(zhí)行shell命令

    Linux命令行循環(huán)執(zhí)行shell命令

    這篇文章主要介紹了Linux命令行,循環(huán)執(zhí)行shell命令的相關知識,主要包括死循環(huán),普通計數(shù)循環(huán),以及Linux shell循環(huán)命令 while死循環(huán)的用法,需要的朋友可以參考下
    2023-01-01
  • a10 config backup for aXAPI

    a10 config backup for aXAPI

    這篇文章主要介紹了Vincent yu 寫的一個a10 config backup for aXAPI version: 2.1 ,需要的朋友可以參考下
    2014-09-09

最新評論