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

Linux下的自動(dòng)化構(gòu)建工具之make/makefile的用法詳解

 更新時(shí)間:2022年10月28日 08:42:52   作者:蔣靈瑜的筆記本  
這篇文章主要為大家詳細(xì)介紹了Linux下的自動(dòng)化構(gòu)建工具之make/makefile的區(qū)別與使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

一、make和makefile的區(qū)別

make是一個(gè)命令,makefile是一個(gè)文件。

二、makefile的原理

1、make的原理詳解

每次生成可執(zhí)行文件時(shí)需要輸入一長串的gcc········指令是不是感覺很麻煩?makefile存在的意義是為了項(xiàng)目的構(gòu)建。需要表明依賴關(guān)系和依賴方法。

2、臨時(shí)文件的清理

mycode:mycode.c
    gcc mycode.c -o mycode
.PHONY:clean                                                                                               
clean:
    rm -f mycode

.PHONY表示被該關(guān)鍵字修飾的對象是一個(gè)偽目標(biāo)。(該偽目標(biāo)總是可被執(zhí)行)

我們在編寫完makefile后,make一下,就能生成對應(yīng)的可執(zhí)行程序。如果依賴的文件列表沒有發(fā)生修改,gcc通過判斷mycode.c的Modify time早于mycode的Modify time,說明依賴文件列表沒有修改,那么再次make將會(huì)失??;反之,重新編譯將會(huì)成功。

不過多次make clean卻不會(huì)失敗,因?yàn)閏lean被.PHONY修飾,變成了一個(gè)偽目標(biāo),所以clean總是可被執(zhí)行。

3、文件的三個(gè)時(shí)間

[root@VM-4-11-centos ~]# stat 106/text.c
  File: ‘106/text.c'
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fd01h/64769d    Inode: 658416      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-09-17 21:13:21.098656019 +0800//最近訪問
Modify: 2022-09-17 21:13:21.098656019 +0800//最近修改
Change: 2022-09-17 21:13:21.098656019 +0800//最近改動(dòng)
 Birth: -

1、讀取文件時(shí),Access time被改變,而Modify、Change time不會(huì)被改變(為防止文件被頻繁訪問修改Access time,優(yōu)化為多次訪問才修改一次該時(shí)間)

2、修改文件時(shí),三個(gè)時(shí)間都會(huì)被改變

3、修改屬性時(shí),Change time被改變,而Access、Modify time不會(huì)被改變

三、makefile的推導(dǎo)規(guī)則

makefile會(huì)自己逐步尋找依賴文件列表,如果沒找到對于依賴文件,將會(huì)繼續(xù)向下尋找該依賴文件的依賴方法。

四、實(shí)現(xiàn)一個(gè)進(jìn)度條

1、緩沖區(qū)問題

#include <stdio.h>    
#include <unistd.h>    
int main()    
{    
    printf("hello world\n");//如果這里沒有\(zhòng)n,程序?qū)?huì)在3秒后執(zhí)行打印
    //fflush(stdout);//fflush會(huì)立即刷新緩沖區(qū)
    sleep(3);    
    return 0;    
}   

因?yàn)閈n才會(huì)刷新緩沖區(qū)(\r等不會(huì)),這個(gè)程序printf執(zhí)行完之后,將會(huì)休眠3秒,如果沒有\(zhòng)n或者fflush手動(dòng)刷新緩沖區(qū),hello world將會(huì)存放至緩沖區(qū),程序結(jié)束后才執(zhí)行打印。

2、實(shí)現(xiàn)倒計(jì)時(shí)程序

#include <stdio.h>    
#include <unistd.h>    
int main()    
{    
    int cnt=10;    
    while(cnt)    
    {    
        printf("%2d\r",cnt);//2d控制刷新兩位,\r表示回車                                                                                   
        fflush(stdout);//手動(dòng)刷新緩沖區(qū)   
        sleep(1);    
        --cnt;    
    }    
    return 0;    
}  

能夠?qū)崿F(xiàn)從10到計(jì)時(shí)的程序。

3、進(jìn)度條的實(shí)現(xiàn)

//.h文件    
#pragma once                                                                                               
#include <stdio.h>                                                          
#include <unistd.h>                                          
#include <string.h>                                                                                                                       
#define NUM 101                                                                      
#define STYLE '*'                                                                               
extern void processOn(); 
//.c文件
#include "process.h"                                                                                           
void processOn()    
{    
    int cnt=0;    
    char bar[NUM];    
    memset(bar,'\0',NUM);    
    char type[4]={'|','/','-','\\'};    
    while(cnt<=100)    
    {    
        //-100表示占據(jù)屏幕100個(gè)空間并左對齊,%%轉(zhuǎn)義為%
        printf("[%-100s][%d%%][%c]\r",bar,cnt,type[cnt%4]);   
        bar[cnt++]=STYLE;    
        fflush(stdout);    
        usleep(50000);    
    }    
    printf("\n");    
} 

makefile中不用寫頭文件,編譯器自己會(huì)去找。

<>查找方式:直接去庫目錄下查找,如果找不到,報(bào)編譯錯(cuò)誤;

""查找方式:先去代碼所在的路徑下查找,如果找不到,再去庫目錄下查找,如果找不到,報(bào)編譯錯(cuò)誤。

到此這篇關(guān)于Linux下的自動(dòng)化構(gòu)建工具之make/makefile的用法詳解的文章就介紹到這了,更多相關(guān)Linux自動(dòng)化構(gòu)建工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell 腳本中的 '-f' 和 '-d' 是什么意思

    shell 腳本中的 '-f' 和 '-d&apo

    本文講解如何使用'-f'和'-d'條件表達(dá)式來測試文件和目錄,在實(shí)際腳本中,這樣的條件判斷常用于根據(jù)不同的情況執(zhí)行不同的操作,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • shell腳本結(jié)合iptables防端口掃描的實(shí)現(xiàn)

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

    這篇文章主要介紹了shell腳本結(jié)合iptables防端口掃描的實(shí)現(xiàn),中間使用了inotify-tools工具,需要的朋友可以參考下
    2014-05-05
  • Shell腳本實(shí)現(xiàn)監(jiān)控swap空間使用情況和查看占用swap的進(jìn)程

    Shell腳本實(shí)現(xiàn)監(jiān)控swap空間使用情況和查看占用swap的進(jìn)程

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)監(jiān)控swap空間使用情況和查看占用swap的進(jìn)程,曾經(jīng)有一段時(shí)間機(jī)器的swap不停上漲,監(jiān)控后發(fā)現(xiàn)是一些java進(jìn)程占用swap空間后,完全不釋放,殺死這些java進(jìn)程后,釋放swap,需要的朋友可以參考下
    2014-12-12
  • shell中的各種括號(hào)的使用方法

    shell中的各種括號(hào)的使用方法

    這篇文章主要介紹了shell中的各種括號(hào)的使用方法,需要的朋友可以參考下
    2015-01-01
  • Linux sort命令具體使用詳解

    Linux sort命令具體使用詳解

    sort命令是Linux系統(tǒng)中用于文本排序的工具,具備多種排序選項(xiàng),如按數(shù)值、字典序、月份等排序,支持升序或降序,語法選項(xiàng)包括-n、-r、-k、-t、-u、-o、-f、-b、-M、-c、-V等,sort命令適合處理日志、數(shù)據(jù)表等文本文件,可以通過組合不同選項(xiàng)來完成復(fù)雜的排序任務(wù)
    2024-09-09
  • Linux終端命令行的常用快捷鍵詳解

    Linux終端命令行的常用快捷鍵詳解

    下面小編就為大家?guī)硪黄狶inux終端命令行的常用快捷鍵詳解。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • exit(-1)或者return(-1)shell得到的退出碼為什么是255

    exit(-1)或者return(-1)shell得到的退出碼為什么是255

    exit(-1)或者return(-1)shell得到的退出碼為是255,大家知道為什么嗎?帶著這個(gè)疑問來腳本之家學(xué)習(xí)下吧,本篇文章告訴大家答案
    2015-10-10
  • shell隨機(jī)定時(shí)修改密碼change_passwd.sh

    shell隨機(jī)定時(shí)修改密碼change_passwd.sh

    這篇文章主要介紹了shell隨機(jī)定時(shí)修改密碼change_passwd.sh,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 詳解Shell腳本中^M的問題和解決方案

    詳解Shell腳本中^M的問題和解決方案

    本文主要介紹了Shell腳本中^M的問題和解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Linux各項(xiàng)目環(huán)境部署記錄(換服務(wù)器部署腳本整理)

    Linux各項(xiàng)目環(huán)境部署記錄(換服務(wù)器部署腳本整理)

    每次換便宜的服務(wù)器都要導(dǎo)致環(huán)境重新部署一遍,十分麻煩,于是把每次部署的腳本整理了一下,方便在服務(wù)器上快速進(jìn)行部署,基于?CentOS
    2023-05-05

最新評(píng)論

缙云县| 友谊县| 东城区| 虞城县| 桂阳县| 滕州市| 龙泉市| 崇明县| 花莲县| 万荣县| 遵义县| 新蔡县| 苏尼特左旗| 云安县| 瑞昌市| 阿拉善左旗| 临猗县| 叙永县| 万载县| 南陵县| 宝鸡市| 乐业县| 江源县| 桐梓县| 柳林县| 新蔡县| 武功县| 河间市| 修文县| 隆尧县| 巢湖市| 托克逊县| 博白县| 家居| 峡江县| 闻喜县| 永新县| 奉节县| 柏乡县| 盘锦市| 黄浦区|