下面的**有沒有問題?
.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...