在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【RT-Thread學習筆記】Makefile核心基礎知識

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-30 13:53 ? 次閱讀

? 筆者常年在Linux環境編程,經常在項目中與Makefile打交道,最近總結了幾個Makefile的小的知識點,分享給大家。

通過閱讀本文,你將了解到以下知識:

  • 1.Makefilke中的.PHONY的作用
  • 2.Makefile中的各種賦值運算符號(= 、:= 、+= 、?=)的區別

Makefilke中的.PHONY的作用


先給大家一個簡單的Makefile,如下:


# This is a Makefile for learning makefile knowledge !!!
# Knowledge point:
# 1. What's the usage of ".PHONY" ?
# 2. What's the diffirences between "=", ":=", "?=", and "+=" ?

TEST_VARIABLE  = "123"
TEST_VARIABLE ?= "456"
TEST_VARIABLE += "789"

all: some_targets
# Simulate to create the lastest target file.
	@touch target_final_file && echo create target_final_file ...
	@echo Make all targets done !!!
	@echo ""
#	@echo "TEST_VARIABLE=$(TEST_VARIABLE)"
	@echo ""
	
TEST_VARIABLE := "abc"

some_targets: 
# Simulate to create some target files.
	@touch target_file1 && echo create target_file1 ...
	@touch target_file2 && echo create target_file2 ...
	@touch target_file3 && echo create target_file3 ...
	@echo ""
#	@echo "TEST_VARIABLE=$(TEST_VARIABLE)"
	@echo ""
	
clean:
	@echo Clean builded project.
	@rm -rf target_file1 target_file2 target_file3 target_final_file

#.PHONY: clean some_targets
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

這個Makefile很簡單,Makefile的同級路徑,輸入make命令,則生成4個目標文件target_file1 target_file2 target_file3 target_final_file;執行make clean則刪除這4個生成的目標文件。執行效果如下圖所示:

看樣子沒有任何問題,那么如果在Makefile同級目錄有一個叫clean的文件呢?我們試下會發生什么?

從演示的效果看,make clean就報錯了,為啥會 “up to date"呢?還是不是因為“clean”這個文件的存在。

原來Makefile中的TARGET默認是個“文件”,如果不使用.PHONY指定一個TARGET是非文件的話,當有一個與該TARGET同名的文件存在時,執行這個TARGET的編譯命令就會報錯,如上面的例子,這個TARGET就是clean。

由此可見,.PHONY的作用就是申明一個TARGET是“偽TARGET”,不用為生成任何文件,自然不用檢查與其同名的文件

我們測試下,加上.PHONY申明后的結果:

與我們預想的一樣,make clean順利執行,生成的target文件刪除成功。


Makefile中的各種賦值運算符號的區別


在Makefile的規則寫法中,變量的賦值運算,有以下幾種方式:

TEST_VARIABLE = "123"
TEST_VARIABLE ?= "456"
TEST_VARIABLE += "789"
TEST_VARIABLE := "abc"

我們先給出結論:

= 是延緩賦值,語句執行時,才會運算賦值,比如VARIABLE = `ls -al` ,只有當使用到VARIABLE變量的時候,才會去執行 ls -al命令求得VARIABLE的值。

?= 是判斷賦值,即當變量在此之前沒有被賦值才會去執行賦值,這個可以防止變量被多次賦值,或變量被覆蓋的情況。

+= 是疊加賦值,即變量在執行+=運算后,會保留之前的值,同時會新增新加入的內容,這個常用于對字符串的處理,可以等同于字符串的追加操作。

:= 是立即賦值,即變量會被立即執行,比如VARIABLE := `ls -al` 在第一個出現這個語句的地方,就會被執行ls -la,之后都不會再執行了,而是直接使用VARIABLE的值;它與 = 的最大區別,就是一個是【立即】,一個是【延緩】;適用于不同的應用場景。

以上就是集中賦值運算的對比和區別,下面分析下開頭給出的Makefile實踐下。

這個是因為TEST_VARIABLE變量最后是用:=賦值的,所有它是最后生效的。其他幾種賦值的效果,留給讀者去驗證下吧。

如有疑問,歡迎在評論席指出。@_@


延伸閱讀:

【Linux + Makefile】簡單實用的Makefile模板來了

【Linux + Makefile】Makefile的高階用法:解決C文件包含的頭文件修改了,但C文件不重新編譯的問題

【Linux + Makefile】十分鐘教你學會Makefile的FORCE

?審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209503
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19184
  • RT-Thread
    +關注

    關注

    31

    文章

    1289

    瀏覽量

    40131
收藏 人收藏

    評論

    相關推薦

    RT-Thread學習筆記】使用scons命令生成靜態庫

    RT-Thread學習筆記】如何使用scons 命令中buildlib的生成靜態庫?
    的頭像 發表于 07-27 09:13 ?6034次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】使用scons命令生成靜態庫

    RT-Thread學習筆記】80x86匯編基礎的三大塊知識

    RT-Thread學習筆記】80x86匯編基礎的三大塊知識
    的頭像 發表于 07-30 10:57 ?1985次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】80x86匯編基礎的三大塊<b class='flag-5'>知識</b>

    RT-Thread學習筆記】ARM匯編基礎的三大塊知識

    RT-Thread學習筆記】ARM匯編基礎的三大塊知識
    的頭像 發表于 07-30 10:59 ?1942次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】ARM匯編基礎的三大塊<b class='flag-5'>知識</b>

    RT-Thread學習筆記】RISC-V匯編基礎三大塊知識

    RT-Thread學習筆記】RISC-V匯編基礎的三大塊知識
    的頭像 發表于 07-30 11:01 ?2765次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】RISC-V匯編基礎三大塊<b class='flag-5'>知識</b>

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> Nano入門<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    RT-Thread 內核學習筆記 - 理解defunct僵尸線程

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 理解defunct僵尸線程

    RT-Thread 內核學習筆記 - 設備模型rt_device的理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 設備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內核學習筆記 - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象初始化鏈表組織方式

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象初始化鏈表組織方式

    RT-Thread 內核學習筆記 - 內核對象操作API

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象操作API

    RT-Thread學習筆記 RT-Thread的架構概述

    的種種優越之處。RT-Thread 是一款完全由國內團隊開發維護的嵌入式實時操作系統(RTOS),具有完全的自主知識產權。經過 16 個年頭的沉淀,伴隨著物聯網的興起,它正演變成一個功能強大、組件豐富的物
    的頭像 發表于 07-09 11:27 ?4556次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b> <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread學習筆記Makefile的FORCE

    RT-Thread學習筆記】十分鐘學會Makefile的FORCE
    的頭像 發表于 07-30 13:55 ?2571次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】<b class='flag-5'>Makefile</b>的FORCE

    RT-Thread學習筆記】如何抓取終端的網絡報文

    RT-Thread學習筆記】如何抓取終端的網絡報文?
    的頭像 發表于 07-30 13:57 ?2824次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】如何抓取終端的網絡報文

    RT-Thread學習筆記】用memwatch排除內存泄露

    RT-Thread學習筆記】使用memwatch排除內存泄露
    的頭像 發表于 07-30 14:01 ?2339次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】用memwatch排除內存泄露

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?3963次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學習</b>
    主站蜘蛛池模板: 午夜影视免费观看| 精品三级视频| 国产成人一区二区三中文| 免费看欧美一级片| 大学生一级特黄的免费大片视频| 99精品在免费线视频| 诱人的老师bd高清日本在线观看| 日本成人一级片| 激情丁香婷婷| a成人在线| 手机看片欧美日韩| v视界影院最新地址| 亚洲欧美日韩在线观看你懂的| 黄色福利小视频| 成人亚洲网站www在线观看| 亚洲人成一区| 欧美精品成人久久网站| 在线中文天堂| a4yy私人毛片在线| 婷婷深爱网| 国模吧在线视频| 天天se天天cao综合网蜜芽| 视频在线一区| 九月丁香婷婷| 网站在线播放| 日本肥妇| 色播五月婷婷| 色天天天天| 一区二区三区高清| 天堂资源在线官网bt| 亚洲精品久久久久午夜三| 成 人网站免费| 色香欲综合成人免费视频| 天天躁夜夜躁狠狠躁| 美国人与性xxxxxxx| 亚洲国产色婷婷精品综合在线观看| 嫩草黄色影院| 天天干天天插| 亚洲人成电影在线观看网| 在线免费视频手机版| 最近2018中文字幕2019视频|