1. 程式人生 > >makefile中函式的呼叫方法

makefile中函式的呼叫方法

函式呼叫,很像變數的使用,也是以“$”來標識的,其語法如下:

$(<function> <arguments>)
${<function> <arguments>}
comma:= ,
empty:=
space:= $(empty) $(empty)
foo:= a b c
bar:= $(subst $(space),$(comma),$(foo))

或是

這裡,<function>就是函式名,make支援的函式不多。<arguments>為函式的引數,引數間以逗號“,”分隔,而函式名和引數之間以“空格”分隔。函式呼叫以“$”開頭,以圓括號或花括號把函式名和引數括起。感覺很像一個變數,是不是?函式中的引數可以使用變數,為了風格的統一,函式和變數的括號最好一樣,如使用“$(subst a,b,$(x))”這樣的形式,而不是“$(subst a,b, ${x})”的形式。因為統一會更清楚,也會減少一些不必要的麻煩。

還是來看一個示例:

在這個示例中,$(comma)的值是一個逗號。$(space)使用了$(empty)定義了一個空格,$(foo)的值是“a b c”,$ (bar)的定義用,呼叫了函式“subst”,這是一個替換函式,這個函式有三個引數,第一個引數是被替換字串,第二個引數是替換字串,第三個引數是替換操作作用的字串。這個函式也就是把$(foo)中的空格替換成逗號,所以$(bar)的值是“a,b,c”。


相關推薦

makefile函式呼叫方法

函式呼叫,很像變數的使用,也是以“$”來標識的,其語法如下: $(<function> <arguments>) ${<function> <arguments>} comma:= , empty:= space:= $

js呼叫jQuery函式方法和jQuery呼叫js函式方法

js呼叫jQuery方法: function getResult(){ //呼叫方式 $().getFuc(); }; //獲取文字框值 $(function(){ //名字為getFuc的jQuery方法 $.fn.getFuc=function(){

以太坊智慧合約函式呼叫三種方法(很重要!!!)

外部呼叫: sendTransaction/call 函式呼叫一般分外部呼叫和內部呼叫兩種, 外部呼叫是通過JSON-RPC介面實現對合約函式的呼叫, 有3種呼叫方式: testInstance.testFunc.sendTransaction(); testInstance.testFun

C語言函式呼叫怎麼返回兩個值

在C語言中,函式只能返回一個值,要返回兩個值,可以改換思路,通過其它方式做到。 1 建立陣列,返回指標。 在要返回的兩個值型別相同時,可以用建立陣列的方式,將要返回的值存在陣列中,並返回陣列首地址,這樣就可以實現返回兩個值的效果。 需要注意的是,要返回陣列首地址,那麼返回

Python函式方法的區別

在Python中函式和方法是有區別的。 區別一所處的位置:函式是直接寫檔案中而不是class中,方法是隻能寫在class中。 區別二定義的方式:  1.函式定義的方式 def關鍵字  然後接函式名 再是括號 括號裡面寫形參也可以省略不寫形參  def function

模板庫排序函式呼叫方法

#include<iostream> #include<cstring> #include<stdio.h> #include<stdlib.h> // qsort head file #include<algorit

C++帶有預設引數的宣告和定義。Qt重寫預設建構函式。C++函式呼叫時實參個數和函式定義時的形參個數不一致時的處理。

1、Qt中自動生成的建構函式 (1)Qt中自動生成的建構函式的宣告 class Chat : public QWidget { Q_OBJECT public: explicit Chat(QWidget *parent = 0); //宣告建構函式,可以帶有初始值“=0”

JavaScript函式方法

在一個物件中繫結函式,稱為這個物件的方法。在JavaScript中,物件的定義是這樣的 var xiaoming = { name: '小明', birth: 1990 }; 但是,如果我們給xiaoming繫結一個函式,就可以做更多的事情。比如,寫個age()方法,返回xiaomi

通用的類成員函式呼叫方法.

這個方法可以實現按照統一的介面來呼叫類成員函式,或者靜態函式和非類成員函式. 主要原理很簡單, 就是儲存類物件指標和函式指標, 需要呼叫的時候就根據類物件指標是否為空來使用不同的方式呼叫函式. 首先, 我們需要一個把成員函式指標轉化成void *的東西..(強制轉換似乎是不行的), 因為我們需要把成員

託管C++函式呼叫的雙重轉換(Double Thunking)

 在VC.Net中使用預設設定/clr編譯時,一個託管函式會產生兩個入口點,一個是託管的,供託管程式碼呼叫,另外一個是非託管的,供非託管程式碼呼叫。但是函式地址,特別是虛擬函式指標只能有一個值,所以需要有一個預設的入口。非託管入口點可能是所有呼叫的預設入口(在 Visual

函式呼叫原理詳解

函式呼叫是程式設計中的重要環節,本文就函式呼叫的過程進行分析。 一、eip、ebp、esp介紹  EIP,EBP,ESP都是系統的暫存器,裡面儲存的是些地址,我們系統中棧的實現上離不開他們三個。 我知道棧的資料結構主要特點是 後進先處。它還有兩個作用: 1.棧是用來儲存

從暫存器看I386和x64位函式呼叫引數傳遞

x86_64基本使用暫存器儲存函式引數,暫存器不夠才入棧; 而i386將所有引數儲存在棧上,通過gcc的擴充套件功能__attribute__((regparm()))即可實現部分引數的暫存器傳遞。 除錯語法: --《深入理解計算機系統(原書第2版)》 程式碼 #inc

Java sort函式呼叫方法

其實與c++Stl庫中的sort函式沒有太大區別。 主要還是這個:Arrays.sort(陣列名,起始下標,終止下標); 這樣會對一組資料進行升序排列; eg: import java.util.*; public class Main { public st

64位與32位系統函式呼叫暫存器使用規則

32位系統: Calling Conventions The x86 architecture has several different calling conventions. Fortunately, they all follow the same register

Python語言函式呼叫與返回--Python(17)

函式的呼叫,先說說函式的執行:函式的執行有4個步驟: 1)呼叫程式在呼叫函式處暫停執行; 2)函式的形參在呼叫時被賦值為實參; 3)根據實參執行函式體; 4)呼叫

C#dll呼叫方法

C# 語言有很多優點,越來越多的人開始使用它來程式設計。但是,C#還有一些不足,如對不少的底層操作是無能為力的,只能通過呼叫Win32 DLL 或C++等編寫的DLL;另外,一般認為C#程式的保密性不夠強,因為它容易被Reflector 反編譯而得到部分原始碼,所以需要使用混合程式設計加強C#程式的保密性,而

go 同一個package下不同檔案函式呼叫報未定義問題

程式碼如下:    hello.go檔案package main import "fmt" func hello() { fmt.Print("go =======") }    main.go檔案package main func main() { h

c語言函式呼叫的過程

一.程式在記憶體中的佔用。要學習C語言中函式呼叫的過程,必須要知道程式在記憶體中各個區域的分佈。C語言的函式呼叫的過程主要分佈在棧中,所以我們今天主要研究棧。二.幾個基本的彙編指令。    call:1.將當前指令的下一條指令的地址儲存到棧中。              2.

shell指令碼函式呼叫的返回值,以及退出狀態問題

     最近開始學習shell指令碼,由於之前沒怎麼接觸過linux和shell,所以一切從頭開始學起      shell指令碼編寫方法與程式設計類似,只是趨向於面向物件程式設計(個人理解,如果錯誤,麻煩各位老鳥指出)。其他關於shell指令碼到底是怎麼樣的一個東西大家

7zip壓縮與解壓縮在vc++呼叫方法例子

 最近在做關於壓縮與解壓縮的程式,在網上找了很長時間,很多的文章都很難理解,經過大半天的嘗試終於找到一種解決辦法,現在以其中的一種壓縮和解壓縮的方式的例子給大家呈現: 首先要有7zip的可執行檔案7z.exe,假設已經將該可執行檔案放自己的專案目錄下,即和自己的可執行檔案放