12 自動生成依賴關係(中)

2021-10-06 19:32:19 字數 961 閱讀 7860

下面的**有沒有問題?

.phony : all

all :

mkdir test

cd test

mkdir subtest

結果:在當前目錄中生成了 test 和 subtest兩個資料夾,和我們預期的不一樣

makefile 中命令的執行機制:

示例改進:

.phony : all

all :

set -e; \

mkdir test; \

cd test; \

mkdir subtest

- 通過 gcc -mm 和 sed 得到 .dep 依賴檔案(部分依賴)

+ 技術點:規則中命令的連續執行

- 通過 include 指令包含素有的 .dep 依賴檔案

+ 技術點:當 .dep 依賴檔案不存在時,使用規則自動生成

程式設計示例:

.phony : all clean

mkdir := mkdir

rm := rm -fr

cc := gcc

srcs := $(wildcard *.c)

deps := $(srcs:.c=.dep)

-include $(deps)

all :

@echo "all"

%.dep : %.c

@echo "creating $@ ..."

@set -e; \

$(cc) -mm -e $^ | sed 's,\(.*\)\.o[ :]*,objs/\1.o : ,g' > $@

clean :

$(rm) $(deps)

自動生成依賴關係

值得思考的問題 目標檔案.o是否只依賴於原始檔.c?編譯器是如何編譯原始檔和標頭檔案的?解答 預處理器將標頭檔案的 直接插入原始檔,編譯器只通過預處理器的原始檔產生目標檔案。如果規則中以原始檔為依賴,命令可能無法執行。因為在修改 的時候有可能只改動了標頭檔案,原始檔沒有被修改。如果規則中只是以原始檔...

Makefile自動生成標頭檔案依賴

makefile自動生成標頭檔案依賴是很常用的功能,本文的目的是想盡量詳細說明其中的原理和過程。首先給出乙個本人在小專案中常用的makefile模板,支援自動生成標頭檔案依賴。cc gcc cflags wall o includeflags ldflags objs seq.o targets t...

Makefile之自動生成依賴(8)

makefile自動生成標頭檔案依賴是很常用的功能,本文的目的是想盡量詳細說明其中的原理和過程。首先給出乙個本人在小專案中常用的makefile模板,支援自動生成標頭檔案依賴。cc gcc cflags wall o includeflags ldflags objs seq.o targets t...