makefile 隱式規則

2021-09-11 11:36:51 字數 2568 閱讀 7628

.phony : all

all : a.txt

all : b.txt

a.txt :

@echo

"this is $@"

b.txt :

@echo

"this is $@"

複製**

示例2--makefile**現同名命令

.phony : all

all :

@echo

"command-1"

all :

@echo

"command-2"

all :

@echo

"this is $@"

複製**

注意事項

示例3--使用include關鍵字時,出現同名命令

makefile檔案與1.mk檔案位於同乙個目錄下

makefile

.phony : all

all :

@echo

"this is $@"

include 1.mk

複製**

1.mk

all :

@echo

"this command from 1.mk"

複製**

#ifndef func_h

#define func_h

#define hello "hello world"

void foo();

#endif

複製**

func.c

#include "stdio.h"

#include "func.h"

void foo

()複製**

main.c

#include "stdio.h"

#include "func.h"

extern void foo();

int main

()複製**

makefile

srcs := $(wildcard *.c)

objs := $(srcs:.c=.o)

$(cc) -o $@ $^

$(rm)

@echo

"target ===> $@"

複製**

makefile等價於下面的檔案

srcs := $(wildcard *.c)

objs := $(srcs:.c=.o)

$(cc) -o $@ $^

$(rm)

@echo

"target ===> $@"

%.o : %.c

@echo

"rule"

$(cc) -c -o $@ $^

複製**

從以上makefile執行結果可以看到,cc、rm、以及%.o : %.c 呼叫的

通過使用$(.variables)可以檢視make中所有預定義的變數

示例5--獲取makefile中的預定義變數

all :

@echo

"$(.variables)"

複製**

示例6--改變預定義變數將改變隱式規則的行為

srcs := $(wildcard *.c)

objs := $(srcs:.c=.o)

cc := gcc

rm := rm -rf *.o

$(cc) -o $@ $^

$(rm)

@echo

"target ===> $@"

%.o : %.c

$(cc) -o $@ -c $^

複製**

編譯效率低下

隱式規則鏈

檢視make的隱式規則

%.o : %.c

$(cc) -o $@ -c $^

複製**

-   在makefile中定義模式為空(如:%.o:%c)

複製**

%.o : %.p

複製**

makefile的隱式規則

target exe source code hello.c objs source code c o target objs gcc o clean rm target objs 一上來直接展示乙份makefile 功能 從功能角度來說,這份makefile 可以編譯出對應的目標檔案,並且順利執行...

Make的隱式規則

隱式規則1 當依賴出現重名時,make將所有的依賴整合,形成最後的依賴。2 當目標中的命令出現重複時,make將發出警告,使用後來的命令執行結果來替換前面的命令執行結果,因此在makefile中使用include時應避免在include所包含的檔案中使用命令。隱式規則2 make會提供一些自定義的變...

筆記 隱式轉換規則

學習並背誦全文型別 undefined null string boolean number 值undefined null 所有字串 true false 所有數字 nan object的成員叫物件,包括array,function,math,date,json,regexp等除了原始值之外的所有...