我可以將變數作為命令列引數傳遞給gnu
makefile嗎? 換句話說,我想傳遞一些最終會成為makefile變數的引數。
如果你建立乙個名為makefile的檔案並新增乙個像$(unittest)這樣的變數,那麼即使使用萬用字元,你也可以在makefile中使用這個變數
例如:
make unittest=*
我使用boost_test並通過引數--run_test = $(unittest)給出乙個萬用字元然後我將能夠使用正規表示式過濾掉我希望我的makefile執行的測試
最簡單的方法是:
make foo=bar target
然後在你的makefile中你可以引用$(foo)
。 請注意,這不會自動傳播到子品牌。
如果您正在使用子品牌,請參閱此文章:將變數傳遞給子品牌
假設您有乙個這樣的makefile:
action:
echo argument is $(argument)
然後你會稱之為make action argument=something
從手冊 :
make中的變數可以來自執行make的環境。 在啟動時檢視的每個環境變數都將轉換為具有相同名稱和值的make變數。 但是,makefile中的顯式賦值或命令引數會覆蓋環境。所以你可以做(從bash):
foobar=1 make
在makefile中生成乙個變數foobar
。
您有幾個選項可以從makefile外部設定變數:
從命令列-make
可以將變數賦值作為其命令列的一部分,與目標混合:
make target foo=bar
但是,除非在賦值中使用override
指令 ,否則將忽略makefile中foo
變數的所有賦值。 (效果與環境變數的-e
選項相同)。
從父make匯出- 如果從makefile呼叫make,通常不應該顯式寫這樣的變數賦值:
# don't do this! target: $(make) -c target cc=$(cc) cflags=$(cflags)
相反,更好的解決方案可能是匯出這些變數。 匯出變數使其進入每個shell呼叫的環境中,並且使用這些命令進行呼叫將按照上面的指定選擇這些環境變數。
# do like this cflags=-g export cflags target: $(make) -c target
您也可以通過使用匯出所有變數export
不帶引數。
這裡沒有引用的另乙個選項包含在stallman和mcgrath的gnu make書中(參見 )。 它提供了乙個例子:
archive.a: ...
ifneq (,$(findstring t,$(makeflags)))
+touch archive.a
+ranlib -t archive.a
else
ranlib archive.a
endif
它涉及驗證給定引數是否出現在makeflags
。 例如..假設您正在研究c ++ 11中的執行緒,並且您已將研究劃分為多個檔案(class01
,...,classnm
),並且您希望:編譯然後編譯所有並單獨執行或編譯乙個如果指定了乙個標誌(例如-r
,則一次執行它。 所以,你可以提出以下makefile
:
cxx=clang++-3.5
cxxflags = -wall -werror -std=c++11
ldlibs = -lpthread
sources = class01 class02 class03
%: %.cxx
$(cxx) $(cxxflags) -o [email protected] $^ $(ldlibs)
ifneq (,$(findstring r, $(makeflags)))
endif
all: $(sources)
.phony: clean
clean:
find . -name "*.out" -delete
有了這個,你會:
export root_dir=
然後在makefile中使用變數$(root_dir)
。 PHP從命令列接收引數
昨天,在牛客網做華為機試題,不太熟悉它的環境,吃了大虧。測試樣例是通過標準輸入輸入的,執行結果是通過標準輸出輸出的。標準輸入就是鍵盤,標準輸出就是顯示器。經過大量實踐,發現fscanf 最好用,沒有之一!mixed fscanf resource handle,string format mixed...
LinuxTips 從命令列到指令碼
對於linux的中的一些問題,一般地我們可以通過以下的思路來解決 1 使用linux提供的很多的小工具和管道來處理 2 如果需要使用多條命令,或需要邏輯判斷,考慮使用sh,sh除了能直接使用linux的小工具外,還可以進行很多的邏輯和流程控制 3 如果需要很多的字串處理,問題也比較複雜,考慮使用pe...
C語言從命令列接收引數
設包含如下程式的檔名為myprog.c編譯後輸入命令 myprog how are you則執行結果是 include int main int argc,char argv argc是命令列總的引數個數,如 c users kang desktop main.exe myprog how are ...