0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

linux系統(tǒng)中Makefile的使用方法

嵌入式開發(fā)星球 ? 來源:嵌入式開發(fā)愛好者 ? 作者:嵌入式開發(fā)愛好者 ? 2024-05-11 08:49 ? 次閱讀

Makefile是一種編譯控制文件,廣泛用于項(xiàng)目的自動化構(gòu)建。它定義了一系列的規(guī)則來指導(dǎo)構(gòu)建的過程。通過Makefile,開發(fā)者可以輕松管理大型項(xiàng)目的編譯鏈接、清理等任務(wù)。本文將從Makefile的基礎(chǔ)用法講起,逐步深入到更高級的應(yīng)用,為你呈現(xiàn)一個(gè)全面而詳細(xì)的Makefile使用手冊。

第一:Makefile的基本結(jié)構(gòu)

一個(gè)最簡單的Makefile包含規(guī)則,規(guī)則由目標(biāo)(target)、依賴(dependencies)和命令(commands)三部分組成:

target: dependencies    commands

命令前的Tab鍵是必須的。下面是一個(gè)簡單的示例:

hello: hello.c    gcc -o hello hello.c

第二:變量的使用

在Makefile中聲明變量可以使得我們的代碼更加簡潔。

CC=gccCFLAGS=-std=c99LDFLAGS=OBJ=main.o utils.oapp: $(OBJ)    $(CC) -o app $(OBJ) $(LDFLAGS)main.o: main.c    $(CC) $(CFLAGS) -c main.cutils.o: utils.c utils.h    $(CC) $(CFLAGS) -c utils.c

第三:通用規(guī)則和模式匹配

模式規(guī)則可以減少我們重復(fù)相同命令的工作量。

%.o: %.c    $(CC) $(CFLAGS) -c $<

$

第四:自動化變量

Makefile提供了一系列自動化變量,它們在規(guī)則的命令中非常有用:

$@表示規(guī)則中的目標(biāo)文件名;

$^表示所有的依賴文件列表;

$

$?表示所有比目標(biāo)新的依賴文件列表。

第五:函數(shù)的使用

Makefile中內(nèi)置了許多函數(shù),用以執(zhí)行字符串操作、文件操作等。

例如,獲取源文件列表:

SRC=$(wildcard *.c)OBJ=$(patsubst %.c,%.o,$(SRC))

第六:控制Make的行為

make -B強(qiáng)制重新編譯所有目標(biāo);

make -n顯示將要執(zhí)行的命令而不實(shí)際執(zhí)行;

make -f 指定使用其他名稱的Makefile文件;

make -j允許并行執(zhí)行(多核編譯)。

第七:高級用法 - 條件判斷

Makefile也支持條件判斷,這在不同環(huán)境需要執(zhí)行不同命令時(shí)非常有用。

ifeq ($(OS),Windows_NT)    RM=del /Qelse    RM=rm -fendifclean:    $(RM) *.o

第八:使用變量和文件包含來組織Makefile

對于大型項(xiàng)目,組織多個(gè)Makefile是一種好方法。

# 在子Makefile中include config.mk

第九:自定義函數(shù)

通過定義可以重用的函數(shù),你可以使你的Makefile變得更加強(qiáng)大和靈活。

define run-cc$(CC) $(CFLAGS) -o $@ $^endefapp: $(OBJ)    $(call run-cc)

第十:處理多目標(biāo)

定義一個(gè)規(guī)則來批量處理多個(gè)文件。

FILES := file1 file2 file3all: $(FILES)$(FILES):    touch $@

第十一:偽目標(biāo)的使用

偽目標(biāo)不代表實(shí)際的文件,它只是一個(gè)動作的名稱。

.PHONY: cleanclean:    rm -f *.o app

第十二:調(diào)試Makefile

你可以使用make --debug或添加注釋來幫助調(diào)試Makefile。

app: main.o utils.o    # 這是一個(gè)鏈接的命令    $(CC) -o app main.o utils.o

結(jié)語

Makefile是構(gòu)建自動化的強(qiáng)大工具,既可以簡化小型項(xiàng)目的構(gòu)建流程,也能夠靈活管理大型應(yīng)用程序的復(fù)雜構(gòu)建系統(tǒng)。通過本文的詳細(xì)論述和豐富示例,您應(yīng)該能夠基本掌握Makefile的各項(xiàng)技能,并在實(shí)際項(xiàng)目中加以應(yīng)用。

希望以上內(nèi)容對你深入理解和使用Makefile有所幫助。記住,“實(shí)踐出真知”——編寫你自己的Makefile并嘗試使用這些特性是最好的學(xué)習(xí)方式。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209476
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19183
收藏 人收藏

    評論

    相關(guān)推薦

    Linux系統(tǒng)Makefile使用方法

    今天主要和大家聊一聊,Linux系統(tǒng)Makefile使用方法。
    發(fā)表于 11-17 09:35 ?4173次閱讀

    linux系統(tǒng)中常見注冊函數(shù)的使用方法

    大家好,今天給大家分享一下,linux系統(tǒng)中常見的注冊函數(shù)register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()的使用方法。
    發(fā)表于 10-19 09:28 ?611次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>系統(tǒng)</b>中常見注冊函數(shù)的<b class='flag-5'>使用方法</b>

    Makefile簡介和使用方法

    Makefile是和make工具一起配合使用的,用于組織管理項(xiàng)目源代碼的編譯和鏈接。
    的頭像 發(fā)表于 12-26 12:24 ?1728次閱讀

    Makefile for VCS 視頻講解

    ASIC/SoC芯片設(shè)計(jì)驗(yàn)證中常常使用Makefile來管理驗(yàn)證環(huán)境,運(yùn)行驗(yàn)證案例。本視頻借用網(wǎng)絡(luò)上的一篇Makefile(Synopsys VCS)文件,簡要介紹了Makefile的基本語法和
    發(fā)表于 10-03 19:01

    Linux使用小技巧:嵌入式Linux系統(tǒng)實(shí)現(xiàn)截屏功能的方法和步驟

    在桌面級操作系統(tǒng),下載一個(gè)截圖軟件就能實(shí)現(xiàn)截屏操作,但在嵌入式Linux系統(tǒng),要實(shí)現(xiàn)小小的截圖功能卻沒有那么簡單。本文為您介紹嵌入式
    發(fā)表于 05-03 07:00

    簡單分析linux內(nèi)核的結(jié)構(gòu)體使用方法

    結(jié)構(gòu)體的使用并不熟練,導(dǎo)致在linux開發(fā)中一頭霧水。下面簡單分析結(jié)構(gòu)體的使用方法。1:結(jié)構(gòu)體的定義struct 結(jié)構(gòu)體名{ 成員列表; } 變量名列表;注意這里的變量名可以直接跟在后面也可以單獨(dú)定義struct 結(jié)構(gòu)體名 變量名 ;舉例: ...
    發(fā)表于 01-19 08:26

    基于Linux 2.6內(nèi)核Makefile分析

    由于Linux的獨(dú)特優(yōu)勢,使越來越多的企業(yè)和科研機(jī)構(gòu)把目光轉(zhuǎn)向Linux的開發(fā)和研究上。目前Linux最新的穩(wěn)定內(nèi)核版本為2.6.17,但是當(dāng)今絕大部分對于Linux
    發(fā)表于 09-18 19:09 ?0次下載
    基于<b class='flag-5'>Linux</b> 2.6內(nèi)核<b class='flag-5'>Makefile</b>分析

    關(guān)于Linux 2.6內(nèi)核Makefile的分析

    [摘要] 由于Linux的獨(dú)特優(yōu)勢,使越來越多的企業(yè)和科研機(jī)構(gòu)把目光轉(zhuǎn)向Linux的開發(fā)和研究上。目前Linux最新的穩(wěn)定內(nèi)核版本為2.6.17,但是當(dāng)今絕大部分對于Linux
    發(fā)表于 11-02 10:12 ?1次下載

    Embeded linux之buildroot的使用方法

    Embeded linux之buildroot使用方法
    發(fā)表于 05-15 14:10 ?3305次閱讀
    Embeded <b class='flag-5'>linux</b>之buildroot的<b class='flag-5'>使用方法</b>

    Linux最新2.6內(nèi)核的Makefile體系詳細(xì)資料分析

    由于Linux的獨(dú)特優(yōu)勢,使越來越多的企業(yè)和科研機(jī)構(gòu)把目光轉(zhuǎn)向Linux的開發(fā)和研究上。目前Linux最新的穩(wěn)定內(nèi)核版本為2.6.17,但是當(dāng)今絕大部分對于Linux
    發(fā)表于 09-06 08:00 ?0次下載

    Linux內(nèi)核的Makefile、Kconfig和.config文件

    Linux內(nèi)核源碼文件繁多,搞不清Makefile、Kconfig、.config間的關(guān)系,不了解內(nèi)核編譯體系,編譯修改內(nèi)核有問題無從下手,自己寫的驅(qū)動不知道怎么編進(jìn)內(nèi)核,不知道怎么配置內(nèi)核,這些
    的頭像 發(fā)表于 11-12 17:31 ?3050次閱讀

    嵌入式LinuxMakefile萬能寫法

    《嵌入式LinuxMakefile萬能寫法》SRC := ${wildcard *.c}OBJ := ${patsubst %.c, %.o, $(SRC)}CC
    發(fā)表于 11-01 17:06 ?2次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>Makefile</b>萬能寫法

    Makefile】簡單實(shí)用的Makefile模板來了

    Linux + Makefile】簡單實(shí)用的Makefile模板來了
    的頭像 發(fā)表于 08-31 12:46 ?1906次閱讀
    【<b class='flag-5'>Makefile</b>】簡單實(shí)用的<b class='flag-5'>Makefile</b>模板來了

    AN033 基于Linux環(huán)境下的Makefile工程管理

    AN033 基于Linux環(huán)境下的Makefile工程管理
    發(fā)表于 02-23 19:08 ?0次下載
    AN033 基于<b class='flag-5'>Linux</b>環(huán)境下的<b class='flag-5'>Makefile</b>工程管理

    Linux用途和基本使用方法

    廣泛應(yīng)用的操作系統(tǒng)。本文將詳細(xì)介紹Linux的用途和基本使用方法。 首先,讓我們來了解一下Linux的用途。Linux具有廣泛的應(yīng)用領(lǐng)域,包
    的頭像 發(fā)表于 11-23 11:13 ?1271次閱讀