1. 程式人生 > >makefile的特殊變數,類似[email protected], $+等 (copied)

makefile的特殊變數,類似[email protected], $+等 (copied)

來源:http://hi.baidu.com/jingweiyoung/item/dea74399c40eb24cf14215cf

Makefile 特殊變數

常用特殊變數

例:

%.o:%.c

          ¥(CC) -c $(CFLAGS) $< -o [email protected]

[email protected] 表示所有目標,這裡是.o檔案

$<  表示依賴目標中第一個目標的名子,這裡是 .c檔案。如果依賴目標是以模式(%)定義的,那麼"$<"將是符合模式的一系列檔案集。(注:是一個一個取出來的)

$?  所有比目標新的依賴目標的集合,以空格分隔。

$^  所有依賴目標的集合,以空格分隔。如果在依賴目標中有多個重複的,那個這個變數會去除重複的依賴目標,只保留一份。

$+  這個變數很像"$^",也是所有依賴目標的集合。只是它不去除重複的依賴目標。

$*  這個變量表示目標模式中"%"及其之前的部分。如果目標是"dir/a.foo.b",並且目標的模
式是"a.%.b",那麼,"$*"的值就是"dir/a.foo"。這個變數對於構造有關聯的檔名是比
較有較。如果目標中沒有模式的定義,那麼"$*"也就不能被推匯出,但是,如果目標文
件的字尾是make所識別的,那麼"$*"就是除了字尾的那一部分。例如:如果目標
是"foo.c",因為".c"是make所能識別的字尾名,所以,"$*"的值就是"foo"。這個特性


是GNU make的,很有可能不兼容於其它版本的make,所以,你應該儘量避免使用"$
*",除非是在隱含規則或是靜態模式中。如果目標中的字尾是make所不能識別的,那
麼"$*"就是空值。
當你希望只對更新過的依賴檔案進行操作時,"$?"在顯式規則中很有用,例如,假設
有一個函式庫檔案叫"lib",其由其它幾個object檔案更新。那麼把object檔案打包的比
較有效率的Makefile 規則是:
lib : foo.o bar.o lose.o win.o
ar r lib $?
在上述所列出來的自動量變數中。四個變數([email protected]、$<、$%、$*)在擴充套件時只會有一個文

件,而另三個的值是一個檔案列表。這七個自動化變數還可以取得檔案的目錄名或是在
當前目錄下的符合模式的檔名,只需要搭配上"D"或"F"字樣。這是GNU make中老版
本的特性,在新版本中,我們使用函式"dir"或"notdir"就可以做到了。"D"的含義就是
Directory,就是目錄,"F"的含義就是File,就是檔案。

摘自:《跟我一起寫Makefile》作者:陳皓

例項:

.SUFFIXES: .pc .c .o
CC=gcc
PROC=proc
AR=ar
INCL = ../../include
SYSINCL1 = -L../lib -lc -lnsl -lm
GFLAG = -g
VPATH = ../common


COMM_SRC = readini.c timetool.c syslog.c cfgfresh.c almstatmsg.c  msgproc.c filetool.c dupauth.c hbproc.c code.c nettool.c
COMM_TGT = $(COMM_SRC:.c=.o)

all:$(COMM_TGT)
.c.o:
        $(CC)   $(GFLAG) -c -I$(INCL) $?

#make without DB
#DUP_SRC = tickfilter.c hash.c
#DUP_TGT        = $(DUP_SRC:.c=.o) $(COMM_TGT)
#TickFilter: $(DUP_TGT)
#       $(CC) $(GFLAG) -o [email protected] $(DUP_TGT) -I$(INCL) $(SYSINCL1)
#       mv [email protected] ../../

.PHONY:clean
clean:
        -rm -f *.o


相關推薦

makefile特殊變數類似<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0a2e4a">[email&#160;protected]a>, $+ copied

來源:http://hi.baidu.com/jingweiyoung/item/dea74399c40eb24cf14215cf Makefile 特殊變數 常用特殊變數 例: %.o:%.c           ¥(CC) -c $(CFLAGS) $&l

Makefile有三個非常有用的變數。分別是<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a480e4">[email&#160;protected]a>$^$

原文地址:https://blog.csdn.net/u013774102/article/details/79043559 假設我們有下面這樣的一個程式,原始碼如下:  /* main.c */ #include "mytool1.h" #include "mytool2.h" i

linux bash Shell特殊變數:Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8aaeca">[email&#160;protected]a>, $?

在linux下配置shell引數說明 前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。  例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: [[email protected] /]$ ec

【Shell】linux bash Shell特殊變數:Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f6b0f">[email&#160;protected]<

在linux下配置shell引數說明 前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。  例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: $echo $$ 執行結果 29949

shell特殊變數$0,$#,<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="edc9ad">[email&#160;protected]a>,$*,$?,$$和命令列引數

變數   含義 $0     當前指令碼的檔名     $n     傳遞給指令碼或函式的引數。n 是一個數字,表示第幾個引數。例如,第一個引數是$1,第二個引數是$2。    $#     傳遞給指令碼或函式的引數個數。     $*     傳遞給指令碼或函式的所有引數

【Shell指令碼學習8】Shell特殊變數:Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83a7c3">[email&#160;protected]a>,

前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。 例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: $echo $$ 執行結果 29949 特殊變數列表 變數

六、Shell特殊變數:Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="694d29">[email&#160;protected]a>, $?, $$和命令列引

前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: $echo $$ 執行結果 29949 特殊變數列表 變數 含義 $0 當前指令碼

Linux下Makefile的編寫及四個特殊符號的意義@、<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="062246">[email&#160;protected]a>、$^、$

我們先看三段C++程式: 一、line1的原始碼 line1.h #ifndef _LINE_1_H #define _LINE_1_H void line1_print(const char *strMsg); #endif line1.cpp #includ

Makefile單字尾雙字尾以及<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="113551">[email&#160;protected]a>的意.

均是根據《跟我一起寫Makefile》寫的,只不過是具體解釋 關於Makefile的單字尾,也就是.c: $(CC) -c $< $(CFLAGS) $(INCDIRS)相當於%:%.c $(CC) -c $< $(CFLAGS) $(INCDIRS)我

Linux之Shell學習(三)Shell特殊變數:Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="321672">[email&#160;protected]a

前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: $echo $$ 執行結果 29949 特殊變數列表 變數 含義 $0 當前指令碼

無法解析的外部符號 <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1e41497770537f77705e2f28">[email&#160;protected]a>該符號在函式 ___tmai

#include using namespace std; int main() { cout <<“This is a C++ program.”; return 0; } 1>------ 已啟動生成: 專案: hello1, 配置: Debug Win32 ---

error LNK2019: 無法解析的外部符號 <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="702f031f131b1504304142">[email&#160;protected]a>

Reason: 學習使用socket,在stdafx.h檔案加了#include ,編譯 #include "stdafx.h" #include   using namespace std;   int _tmain(int argc

在linux中$*和<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90b4d0">[email&#160;protected]a>有什麼區別?

看了很多的文章,依然似懂非懂。現在,終於理解了它們兩者之間的區別。 $*會把當前指令碼的所有引數作為一個引數傳遞給子指令碼。(在英文中,*字元有“所有”的意思) [email protected]會把當前指令碼的所有引數分別作為一個引數傳遞給子指令碼。(在英文中,@字元有“獨立”的

Spring註解開發<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="96a5bbbbd6dffbe6f9e4e2">[email&#160;protected]a> FacotryBean 註冊

目錄 @ComponentScan註解用於掃描自己寫的類(@Controller,@Service,@Component,@Repository),用於加入IOC容器中 @Bean 可以把其他包或者自己寫的類加到IOC容器中 @Import 也可以辦

makefile 萬用字元瞭解% <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4e084">[email&#160;protected]a> $^ $<

把目錄下所有檔案都編譯的命令。 1 all:$(subst .c,.o,$(wildcard *.c)) 2 3 %.o:%.c 4 gcc -o [email protected] $<    下面是幾個特舒符號的意思:   [email 

在linux中$*和<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="250165">[email&#160;protected]a>有什麼區別?

看了很多的相關文章,似懂非懂。現在,終於真正理解了它們兩者之間的區別。 首先我們看如下一個bash命令: ./start.sh "a b" "c" "d" 請問,給start.sh指令碼傳遞了幾個引數? 大部分人都知道,總共傳遞了3個引數,其中,$1等於a b,$2等

@演算法 - <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c8fd88">[email&#160;protected]a> 牛頓迭代法的應用——多項式開方對數指數三角與冪函式

目錄 @0 - 參考資料@ @0.5 - 多項式平方根@ @1 - 牛頓迭代法@ @數學上的定義@ @對於多項式的定義@ @2 - 牛頓迭代的應用@ @重新推導 - 多項式逆元@ @重新推導 - 多項式平方根@ @多項式對數函式@