我們在寫makefile時 多多少少會用到shell指令碼, 對於變數的在shell中的使用有一些要注意的細節。讓我們從乙個簡單的makefile來看看。
注意makefile中一定要有乙個目標,且一定要有乙個終極目標,若想要有多個目標應該設立乙個偽目標。如下:
all: hello hello2 hello3
hello: hello.c
gcc ....
hello2: hello2.c
gcc ...
hello3: hello3.c
gcc ...
name=hello #這裡一定不要有空格 hello可以加上""或'' 若定義的值有空格 則要加上"" 或 ''
echo $name #這裡使用變數時 要加上$ 也可以$ 但是不能$()這個表示執行裡面的命令
hhh=hello #方式一
zzz = hello #方式二
all:
echo
$hhh
#這樣輸出並不能輸出hhh的值 a
echo
$zzz
#同上echo $(hhh) # 輸出hello b
echo $(zzz) # 輸出hello 這裡可以看到有別與shell變數定義。
echo
$# 輸出hello c
echo
$# 輸出hello
echo $$hhh
# 輸出空 #$$這種方式是shell中使用makefile中定義的變數 這是乙個command line。 d
echo $$zzz
# 輸出空
if [ -n "$" ];then
echo
"ok";fi; #這裡正確輸出ok e
if [ -n "$" ];then
echo
"ok";fi; # 正確輸出ok
if [ -n "$(hhh)" ];then
echo
"ok";fi; # 正確輸出ok h
if [ -n "$(zzz)" ];then
echo
"ok";fi; # 正確輸出ok
if [ -n "$hhh" ];then
echo
"ok";fi; # 變數名不正確 j
if [ -n "$zzz" ];then
echo
"ok";fi; # 變數名不正確
if [ -n "$$zzz" ];then
echo
"ok";fi; #沒有輸出 k
if [ -n "$$hhh" ];then
echo
"ok";fi;#沒有輸出
if [ -n $$zzz ];then
echo
"ok";fi; #輸出ok l
if [ -n $$hhh ];then
echo
"ok";fi;#輸出ok
我認為makefile的變數定義使用就像是c/c++中的巨集的使用方式 只是替換而已
1. 情況a中:echo $hhh
是優先於第乙個字元結合去找$h
變數 但是這裡沒有h定義 所以a這種情況 就是echo hh
會輸出hh
2. 情況bc中:正確的使用方式
3. 情況d中:變數名變為$hhh
這樣的變數名為空
4. eh 中: 正確
5. j中$hhh
變為 hh
6. k 因為沒有定義$hhh
這個變數
7. l 正確方式 與d的差別就是這句是shell d是command
以上是結合實際情況的個人理解
總結就是 makefile變數定義可以有空格, 使用變數時用$() 若在shell中使用makefile中定義的變數時,要使用$$
並且一定不要使用「」和『』。
Makefile中的變數
makefile中的變數 2010年03月25日 b makefile b b 中的變數 b b b b b b 在makefile中,變數就是乙個名字 像是c語言中的巨集 代表乙個文字字串 變數的值 在makefile的目標 依賴 命令中引用乙個變數的地方,變數會被它的值所取代 與c語言中巨集引用...
make和Makefile中的規則和變數
make機制的執行環境需要乙個命令列程式make和乙個文字檔案makefile。make命令執行後有3個退出碼 make的使用格式是 make options target options為make工具的引數選項,target為makefile中指定的目標。make 工具的引數選項 選項含義 f f...
Makefile中變數的使用
表示所有的目標檔案。表示規則中的目標成員名。例如,如果乙個目標是 foo.a bar.o 那麼,就是 foo.a 如果目標不是函式庫檔案 unix下是 a windows下是 lib 其值為空。依賴目標 中的第一 個目標名 字。如果 依賴目標 是以模式 即 將是符合模式的一系列的檔案集。注意,其是乙...