Makefile中的變數和shell變數

2021-07-25 23:46:24 字數 2069 閱讀 7334

我們在寫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 其值為空。依賴目標 中的第一 個目標名 字。如果 依賴目標 是以模式 即 將是符合模式的一系列的檔案集。注意,其是乙...