第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在規(guī)則執(zhí)行時定義make變量

在規(guī)則執(zhí)行時定義make變量

鴻蒙傳說 2019-12-10 09:48:00
在我的GNUmakefile中,我想有一個使用臨時目錄的規(guī)則。例如:out.tar: TMP := $(shell mktemp -d)        echo hi $(TMP)/hi.txt        tar -C $(TMP) cf $@ .        rm -rf $(TMP)按照書面規(guī)定,上述規(guī)則在解析規(guī)則時會創(chuàng)建一個臨時目錄。這意味著,即使我一直都不做out.tar,也會創(chuàng)建許多臨時目錄。我想避免/ tmp堆滿未使用的臨時目錄。有沒有一種方法可以使變量僅在觸發(fā)規(guī)則時定義,而不是在定義規(guī)則時定義?我的主要思想是將mktemp和tar轉(zhuǎn)儲到Shell腳本中,但這似乎有些難看。
查看完整描述

3 回答

?
慕婉清6462132

TA貢獻1804條經(jīng)驗 獲得超2個贊

在您的示例中,TMP只要評估了規(guī)則,out.tar便會設(shè)置變量(并創(chuàng)建臨時目錄)。為了僅在out.tar實際觸發(fā)時創(chuàng)建目錄,您需要將目錄創(chuàng)建移至以下步驟:


out.tar : 

    $(eval TMP := $(shell mktemp -d))

    @echo hi $(TMP)/hi.txt

    tar -C $(TMP) cf $@ .

    rm -rf $(TMP)

該EVAL,如果它已經(jīng)手動鍵入到makefile文件函數(shù)計算的字符串。在這種情況下,它將TMP變量設(shè)置為shell函數(shù)調(diào)用的結(jié)果。


編輯(回應(yīng)評論):


要創(chuàng)建唯一變量,您可以執(zhí)行以下操作:


out.tar : 

    $(eval $@_TMP := $(shell mktemp -d))

    @echo hi $($@_TMP)/hi.txt

    tar -C $($@_TMP) cf $@ .

    rm -rf $($@_TMP)

這會將目標名稱(在本例中為out.tar)放在變量之前,從而產(chǎn)生一個名稱為的變量out.tar_TMP。希望這足以防止沖突。


查看完整回答
反對 回復 2019-12-10
?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

另一種可能性是在規(guī)則觸發(fā)時使用單獨的行來設(shè)置Make變量。


例如,這是帶有兩個規(guī)則的makefile。如果規(guī)則觸發(fā),它將創(chuàng)建一個臨時目錄并將TMP設(shè)置為該臨時目錄名稱。


PHONY = ruleA ruleB display


all: ruleA


ruleA: TMP = $(shell mktemp -d testruleA_XXXX)

ruleA: display


ruleB: TMP = $(shell mktemp -d testruleB_XXXX)

ruleB: display


display:

    echo ${TMP}

運行代碼會產(chǎn)生預期的結(jié)果:


$ ls

Makefile

$ make ruleB

echo testruleB_Y4Ow

testruleB_Y4Ow

$ ls

Makefile  testruleB_Y4Ow


查看完整回答
反對 回復 2019-12-10
  • 3 回答
  • 0 關(guān)注
  • 603 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號