国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語(yǔ)言】嵌入式C語(yǔ)言項(xiàng)目管理利器:深入理解Makefile的應(yīng)用與實(shí)踐

這篇具有很好參考價(jià)值的文章主要介紹了【C語(yǔ)言】嵌入式C語(yǔ)言項(xiàng)目管理利器:深入理解Makefile的應(yīng)用與實(shí)踐。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、makedile的概述

1、案例引入

2、makefile?

3、Makefile優(yōu)點(diǎn)

二、makefile的語(yǔ)法規(guī)則?

1、語(yǔ)法規(guī)則

2、簡(jiǎn)單實(shí)戰(zhàn)

三、makefile的變量

1、自定義變量

2、系統(tǒng)環(huán)境變量

3、預(yù)定義變量

4、高級(jí)makefile


一、makefile的概述

1、案例引入

gcc a.c b.c c.c ‐o main

如果只修改了b.c 使用gcc編譯 需要對(duì)所有文件重新編譯。makefile可避免此問(wèn)題.

2、makefile?

make 是個(gè)命令,是個(gè)可執(zhí)行程序,用來(lái)解析 Makefile 文件的命令。

makefile 是個(gè)文件,這個(gè)文件中描述了程序的編譯規(guī)則。

3、Makefile優(yōu)點(diǎn)

? ? ? ? (1)簡(jiǎn)化編譯程序的時(shí)候輸入得命令,編譯的時(shí)候只需要敲 make 命令就可以了

? ? ? ? (2)可以節(jié)省第二次編譯時(shí)間,提高編譯效率

二、makefile的語(yǔ)法規(guī)則?

1、語(yǔ)法規(guī)則

目標(biāo)文件名:依賴文件(建立關(guān)系)

<Tab>命令列表

目標(biāo)文件:就是需要生成的文件(可執(zhí)行文件、其他obj文件或動(dòng)作名稱)

依賴文件:通過(guò)依賴文件 生成 目標(biāo)文件(通常有幾個(gè)依賴文件)

命令列表:實(shí)現(xiàn) 將依賴文件 生成 目標(biāo)文件(多個(gè)命令時(shí),每個(gè)命令占一行)

以gcc a.c b.c c.c -o main編譯三個(gè)文件為例:

語(yǔ)法實(shí)例:

main:a.c b.c c.c

????????gcc a.c b.c c.c ‐o main

2、簡(jiǎn)單實(shí)戰(zhàn)

(1)創(chuàng)建并編寫test.c文件

#include <stdio.h>
int main(int argc, char const *argv[])
{
    printf("hello world\n");
    return 0;
}

(2)創(chuàng)建并編寫makefile文件

main:test.c
    gcc test.c ‐o main

(3)最后在linux終端輸入命令make即可編譯test.c文件

make 默認(rèn)在工作目錄中尋找名為 GNUmakefile、makefile、Makefile 的文件作為輸入文件

make -f 自定義makefle文件名自定義文件名的文件作為輸入文件

make 默認(rèn)會(huì)實(shí)現(xiàn) makefile 文件內(nèi)的第一個(gè)目標(biāo)。 make 目標(biāo)文件名 ----->選擇目標(biāo)執(zhí)行。

多個(gè)目標(biāo)時(shí),命令make 目標(biāo)文件名:另一目標(biāo)文件名 ----->選擇多個(gè)目標(biāo)執(zhí)行。

3、較復(fù)雜實(shí)戰(zhàn)

(1)創(chuàng)建并編寫fun.c

int my_add(int x, int y)
{
    return x+y;
}
int my_sub(int x, int y)
{
    return x-y;
}
int my_mul(int x, int y)
{
    return x*y;
}
int my_div(int x, int y)
{
    return x/y;
}

(2)創(chuàng)建并編寫fun.h

#ifndef __FUN_H__
#define __FUN_H__

extern int my_add(int x, int y);
extern int my_sub(int x, int y);
extern int my_mul(int x, int y);
extern int my_div(int x, int y);

#endif

(2)創(chuàng)建并編寫main.c

#include <stdio.h>
#include "fun.h"
int main(int argc, char const *argv[])
{
    printf("%d\n", my_add(10, 20));
    printf("%d\n", my_sub(10, 20));
    printf("%d\n", my_mul(10, 20));
    printf("%d\n", my_div(10, 20));

    return 0;
}

(3)創(chuàng)建并編寫makefile

main:main.o fun.o
    gcc main.o fun.o -o main
main.o:main.c
    gcc -c main.c -o main.o
fun.o:fun.c
    gcc -c fun.c -o fun.o
clean:
    rm *.o main

程序流程:當(dāng)要執(zhí)行第一個(gè)目標(biāo)時(shí)沒(méi)有找到main.o和fun.o,會(huì)往下尋找生成main.o和fun.o的指令,執(zhí)行完生成main.o和fun.o的指令后才返回執(zhí)行第一個(gè)指令。

問(wèn)題:.o過(guò)多時(shí)相應(yīng)的指令變多,可以利用makefile的變量?jī)?yōu)化

三、makefile的變量

1、自定義變量

makefile變量類似于C語(yǔ)言中的,變量名可以數(shù)字開頭,大小寫敏感,一般在頭部定義

變量名=變量值

取變量值:$(變量名)${變量s

以二中較復(fù)雜實(shí)戰(zhàn)為例做自定義修改:

//自定義變量
cc=gcc
exec=main
obj=main.o fun.o

//用自定義變量做部分修改
$(exec):$(obj)
$(cc) $(obj) ‐o $(exec)
main.o:main.c
$(cc) ‐c main.c ‐o main.o
fun.o:fun.c
$(cc) ‐c fun.c ‐o fun.o
clean:
rm *.o $(exec)

2、系統(tǒng)環(huán)境變量

make工具解析makefile前,讀取系統(tǒng)環(huán)境變量并設(shè)置為makefile的變量。

linux下查看環(huán)境變量命令:env

linux下添加系統(tǒng)環(huán)境變量命令:export 要添加的變量名=變量值,舉例:export cc=gcc.

3、預(yù)定義變量

【C語(yǔ)言】嵌入式C語(yǔ)言項(xiàng)目管理利器:深入理解Makefile的應(yīng)用與實(shí)踐,C/C++,c語(yǔ)言,開發(fā)語(yǔ)言

4、高級(jí)makefile

以優(yōu)化二中較復(fù)雜實(shí)戰(zhàn)為例:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-615171.html

//自定義變量
cc=gcc
exec=main
obj=main.o fun.o
flags=‐Wall
//用自定義變量和預(yù)定義變量修改優(yōu)化
$(exec):$(obj)
    $(cc) $^ ‐o $@ $(flags)
%.o:%.c//此時(shí)只需一條語(yǔ)句即可完成多條編譯語(yǔ)句
    $(cc) ‐c $< ‐o $@ $(flags)

clean:
    rm $(obj) $(exec)

到了這里,關(guān)于【C語(yǔ)言】嵌入式C語(yǔ)言項(xiàng)目管理利器:深入理解Makefile的應(yīng)用與實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C/C++|物聯(lián)網(wǎng)開發(fā)入門+項(xiàng)目實(shí)戰(zhàn)|函數(shù)輸入與輸出|值傳遞|地址傳遞|連續(xù)空間的傳遞|嵌入式C語(yǔ)言高級(jí)|C語(yǔ)言函數(shù)的使用-學(xué)習(xí)筆記(11)

    C/C++|物聯(lián)網(wǎng)開發(fā)入門+項(xiàng)目實(shí)戰(zhàn)|函數(shù)輸入與輸出|值傳遞|地址傳遞|連續(xù)空間的傳遞|嵌入式C語(yǔ)言高級(jí)|C語(yǔ)言函數(shù)的使用-學(xué)習(xí)筆記(11)

    參考: 麥子學(xué)院-嵌入式C語(yǔ)言高級(jí)-C語(yǔ)言函數(shù)的使用 一堆代碼的集合,用一個(gè)標(biāo)簽去描述它 復(fù)用化,降低冗余度 標(biāo)簽 ------ 函數(shù)名 函數(shù)和數(shù)組都屬于內(nèi)存空間,函數(shù)具備3要素: int *p; int a[100]; 1、函數(shù)名(地址) 2、輸入?yún)?shù) 3、返回值 在定義函數(shù)時(shí),必須將3要素告知編譯器

    2023年04月20日
    瀏覽(27)
  • 【嵌入式——C語(yǔ)言】共用體

    定義 :共用體和結(jié)構(gòu)體類似,也是一種構(gòu)造類型的數(shù)據(jù)結(jié)構(gòu),在進(jìn)行某些算法時(shí),需要使用幾種不同類型的變量存到同一段內(nèi)存單元中,幾個(gè)變量所使用空間相互重疊,這幾個(gè)不同的變量共同占用一段內(nèi)存的結(jié)構(gòu),被稱作共用體類型結(jié)構(gòu)。 共用體的大小是其占內(nèi)存長(zhǎng)度最大

    2024年01月22日
    瀏覽(24)
  • 嵌入式 QT 界面布局管理

    嵌入式 QT 界面布局管理

    目錄 1、實(shí)例程序功能 2、界面組件布局 2.1 界面組件的層次關(guān)系 2.2 布局管理 2.3 伙伴關(guān)系和Tab順序 ? ? ? 創(chuàng)建一個(gè) Widget Application 項(xiàng)目 samp2_2, 在創(chuàng)建窗體時(shí)選擇基類 QDialog ,生成的類命名為 QWDialog ,并選擇生成窗體。 ? ? 如 此 新建 的項(xiàng) 目 samp2_2 有一 個(gè)界 面文 件 qwdi

    2024年02月04日
    瀏覽(29)
  • 嵌入式C語(yǔ)言(入門必看)

    嵌入式C語(yǔ)言(入門必看)

    ? ? ? 目錄 STM32的數(shù)據(jù)類型 const static volatile extern ?struct結(jié)構(gòu)體 enum ?typedef #define 回調(diào)函數(shù) #ifdef 、#ifndef、#else ?、#if ? ? 嵌入式開發(fā)中既有底層硬件的開發(fā)又涉及上層應(yīng)用的開發(fā),即涉及系統(tǒng)的硬件和軟件,C語(yǔ)言既具有匯編語(yǔ)言操作底層的優(yōu)勢(shì),又

    2024年01月17日
    瀏覽(23)
  • 【面試集錦 - 嵌入式軟件 - C語(yǔ)言】

    指針函數(shù)(Pointer to a Function)和函數(shù)指針(Function Pointer)是在C和C++中經(jīng)常使用的概念,它們雖然名稱相似,但是在用法和作用上有一些區(qū)別。 指針函數(shù) 指針函數(shù)是指返回值為指針類型的函數(shù)。換句話說(shuō),它是一個(gè)函數(shù),其返回類型是一個(gè)指針。指針函數(shù)可以用來(lái)實(shí)現(xiàn)動(dòng)態(tài)分

    2024年02月07日
    瀏覽(18)
  • (嵌入式c語(yǔ)言)c語(yǔ)言編譯常見(jiàn)錯(cuò)誤

    (嵌入式c語(yǔ)言)c語(yǔ)言編譯常見(jiàn)錯(cuò)誤

    預(yù)處理(gcc -E -o)-編譯(gcc -S -o)-匯編(gcc -c -o)-鏈接(gcc -o) 將代碼中的define 和 include替換成實(shí)體碼? define和include不是,是在編譯過(guò)程中處理的。 包含 #include 包含頭文件 宏 #define 宏? 替換? 不會(huì)進(jìn)行語(yǔ)法檢查 #define 宏? 宏體? ?宏體要加括號(hào) #define ABC?

    2024年02月11日
    瀏覽(22)
  • 嵌入式項(xiàng)目分享 stm32智能運(yùn)動(dòng)計(jì)步系統(tǒng) - 物聯(lián)網(wǎng) 嵌入式 單片機(jī)

    嵌入式項(xiàng)目分享 stm32智能運(yùn)動(dòng)計(jì)步系統(tǒng) - 物聯(lián)網(wǎng) 嵌入式 單片機(jī)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(108)
  • 【嵌入式項(xiàng)目應(yīng)用】__用于搭建調(diào)試輸出、建立時(shí)間系統(tǒng)的嵌入式框架“Zorb Framework”

    【嵌入式項(xiàng)目應(yīng)用】__用于搭建調(diào)試輸出、建立時(shí)間系統(tǒng)的嵌入式框架“Zorb Framework”

    目錄 一、什么是Zorb? 二、嵌入式環(huán)境搭建 三、調(diào)試輸出 四、實(shí)現(xiàn)斷言 五、建立時(shí)間系統(tǒng) 六、結(jié)束語(yǔ) (* ̄︶ ̄)創(chuàng)作不易!期待你們的?點(diǎn)贊、收藏和評(píng)論喔。 Zorb Framework是一個(gè)基于 面向?qū)ο?的思想來(lái)搭建一個(gè) 輕量級(jí)的嵌入式框架 。 搭建Zorb Framework的目的是為在不能運(yùn)行

    2024年02月06日
    瀏覽(20)
  • Linux嵌入式項(xiàng)目-智能家居

    Linux嵌入式項(xiàng)目-智能家居

    一、資料下載 ?二、框架知識(shí) ?三、MQTT通信協(xié)議 1、上位機(jī)APP主要工作? ? ? ? 1.wait for msg? / while(1)訂閱等待消息 ? ? ? ?2.處理消息 客戶端創(chuàng)建了兩個(gè)線程,一個(gè)線程用于發(fā)布消息,一個(gè)線程用于監(jiān)聽訂閱消息 (那我的仿真系統(tǒng)也可以啊,一個(gè)發(fā)送處理數(shù)據(jù)線程。一個(gè)監(jiān)聽

    2024年02月16日
    瀏覽(25)
  • 嵌入式項(xiàng)目分享 stm32機(jī)器視覺(jué)的口罩佩戴檢測(cè)系統(tǒng) - 單片機(jī) 物聯(lián)網(wǎng) 嵌入式

    嵌入式項(xiàng)目分享 stm32機(jī)器視覺(jué)的口罩佩戴檢測(cè)系統(tǒng) - 單片機(jī) 物聯(lián)網(wǎng) 嵌入式

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(448)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包