makefile中的shell變量語(yǔ)法及用法總結(jié)
在 Makefile 中,變量的使用規(guī)則確實(shí)容易讓人混淆,下面我來(lái)總結(jié)一下常見(jiàn)的幾種用法及其含義:
1.$(var)或${var}
- 用途:引用 Makefile 中定義的變量。
- 示例:
PORT = 8000
start:
echo "Port is $(PORT)"- 說(shuō)明:
$(PORT)是 Makefile 的標(biāo)準(zhǔn)語(yǔ)法,用于獲取變量PORT的值。${PORT}功能相同,只是另一種寫法。
2.$$var
- 用途:在 shell 命令中引用 shell 變量(避免與 Makefile 變量沖突)。
- 示例:
start-by-uvicorn:
@PORT_VAL=$${port:-9608}; \
echo "Using port: $$PORT_VAL"- 說(shuō)明:
$${port:-9608}是 shell 的語(yǔ)法,表示如果port未定義,則使用默認(rèn)值9608。$$PORT_VAL是為了告訴 Makefile:“這不是 Makefile 變量,而是 shell 變量”,防止 Makefile 嘗試解析它。
3.@符號(hào)
- 用途:抑制命令本身的回顯(即不讓命令本身顯示在終端中)。
- 示例:
start:
@echo "Starting application..."- 說(shuō)明:
- 默認(rèn)情況下,Makefile 會(huì)先打印執(zhí)行的命令,再執(zhí)行命令。
- 加上 [@](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/utils/logger.py#L0-L67) 后,只會(huì)執(zhí)行命令,不會(huì)打印命令本身。
4.組合使用示例
PORT = 8000
start-by-uvicorn:
@PORT_VAL=$${port:-$(PORT)}; \
echo "Using port: $$PORT_VAL"- 解釋:
$(PORT):引用 Makefile 中定義的PORT變量(值為8000)。$${port:-$(PORT)}:shell 語(yǔ)法,若 [port](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/config/settings.py#L60-L60) 未定義,則使用$(PORT)的值。$$PORT_VAL:引用 shell 變量PORT_VAL,避免被 Makefile 解析。
總結(jié)對(duì)比表
| 語(yǔ)法 | 類型 | 用途 |
|---|---|---|
$(var) | Makefile | 引用 Makefile 中定義的變量 |
$${var} | Shell | Shell 中引用變量并支持默認(rèn)值 |
$$var | Shell | Shell 中引用變量(避免與 Makefile 沖突) |
@command | Makefile | 抑制命令回顯 |
實(shí)際場(chǎng)景建議
- 如果你在 Makefile 規(guī)則內(nèi)部 需要引用 Makefile 變量,使用
$(var)。 - 如果你需要在 shell 命令中操作變量,使用
$$var和$${var}。 - 如果你不希望命令本身顯示在終端中,加上 [@](file:///Users/liujiaqi/Desktop/code/cedongli/waf/python/waf-collect-feature/src/utils/logger.py#L0-L67)。
到此這篇關(guān)于makefile中的shell變量語(yǔ)法總結(jié)的文章就介紹到這了,更多相關(guān)makefile shell變量語(yǔ)法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享個(gè)簡(jiǎn)易版Linux服務(wù)器初始化Shell腳本
該Shell腳本主要用于新安裝Linux服務(wù)器系統(tǒng)的初始化工作,包括關(guān)閉IPv6模塊,關(guān)閉SELinux,讓vim顯示顏色,設(shè)置系統(tǒng)語(yǔ)言編碼,優(yōu)化系統(tǒng)服務(wù),內(nèi)核參數(shù)優(yōu)化等2013-07-07
linux shell awk獲得外部變量(變量傳值)簡(jiǎn)介
這里提到awk,相信寫shell的朋友都會(huì)接觸到。AWK 是一種用于處理文本的編程語(yǔ)言工具2013-11-11
shell腳本學(xué)習(xí)指南[六](Arnold Robbins & Nelson H
這篇文章主要介紹了shell腳本學(xué)習(xí)指南[六](Arnold Robbins & Nelson H.F. Beebe著),需要的朋友可以參考下2014-02-02
開(kāi)發(fā)必備Linux常用的幾個(gè)命令分享
Linux作為一個(gè)高度成熟和強(qiáng)大的操作系統(tǒng),擁有非常豐富的命令行工具,對(duì)于Java開(kāi)發(fā)者來(lái)說(shuō),掌握一些常用的Linux命令可以大大提高工作效率,尤其是在服務(wù)器端開(kāi)發(fā)時(shí),本文小編給大家分享了一些常用命令,需要的朋友可以參考下2023-10-10
shell 通過(guò)makefile傳參給c語(yǔ)言的實(shí)現(xiàn)示例
本文主要介紹了shell 通過(guò)makefile傳參給c語(yǔ)言的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
shell 腳本之用ab每隔30分鐘并發(fā)一次休息10分鐘
這篇文章給大家分享如何使用shll解決用ab每隔30分鐘并發(fā)一次休息10分鐘,需要的朋友可以參考下2019-11-11
如何使用 Bash 腳本中的time命令來(lái)統(tǒng)計(jì)命令執(zhí)行時(shí)間(中英雙語(yǔ))
本文介紹了如何在Bash腳本中使用`time`命令來(lái)測(cè)量命令執(zhí)行時(shí)間,包括`real`、`user`和`sys`三個(gè)時(shí)間指標(biāo),并展示了如何格式化輸出和將結(jié)果保存到文件中,感興趣的朋友一起看看吧2025-01-01
Linux?shell中的-d,-f,-e,-n的作用小結(jié)
本文主要介紹了Linux?shell中的-d,-f,-e,-n的作用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

