一、檔案配置目錄
1)原目錄
demo
├── makefile
├── demo.cpp
├── demo.hpp
└── main.cpp
2)make之後的目錄
demo
├── makefile
├── demo.cpp
├── demo.hpp
├── demo.o
├── main.cpp
├── main.o
└── target
二、 a setup for makefile
objects = main.o demo.o #定義乙個變數target: $(objects) #最終目標檔案及其依賴的檔案和生成方式
clang++ -std=c++11 $(objects) -g -o target #生成命令
main.o: demo.hpp #中間檔案及其依賴檔案和生成方式
clang++ -std=c++11 main.cpp -g -c -o main.o #生成命令
demo.o: demo.hpp #中間檔案及其依賴檔案和生成方式
clang++ -std=c++11 demo.cpp -g -c -o demo.o #生成命令
clean: #偽中間檔案,既動作
rm -rf target $(objects) #清楚編譯鏈結所產生的檔案
注:對於中間檔案的依賴檔案,我們可以利用make的自動推導功能,只制定自定義依賴的標頭檔案即可;對於中間檔案的生成方式,由於預設的生成方式存在問題,我們需要制定。
三、more
1)對於大型的project,我們可以新建乙個src目錄,將各個模組的原始檔放在其下
2)對於編譯產生的中間檔案,我們可以新建乙個build目錄,並將其置於其下
3)對於產生的最終目標檔案,我們可以新建乙個bin目錄,並將其置於其下
4)對於編譯鏈結,我們可以採用範性程式設計的思想,利用find和patsubst等命令來構造sources和objects等變數
如下:
#folderssrcdir := src
builddir := build
targetdir := bin
#target
executable := target
traget = $(targetdir)/$(executable)
#code lists
srcext := cpp
sources := $(shell find $(srcdir) -type f -name "*.$(srcext)")
objects := $(patsubst $(srcdir)/%,$(builddir)/%,$(sources:.$(srcext)=.o))
$(traget): $(objects)
@mkdir -p $(targetdir)
@clang++ -std=c++11 $^ -g -o $(traget)
$(builddir)/%.o: $(srcdir)/%.$(srcext)
@mkdir -p $(builddir)
@clang++ -std=c++11 -c -o $@ $<
clean:
@rm -rf target $(targetdir) $(builddir)
demo
├── makefile
├── bin
│ └── target
├── build
│ ├── demo.o
│ └── main.o
└── src
簡單的makefile例子
1.2.3 簡單的示例 本小節開始我們在第一小節中提到的例子。此例子由3個頭檔案和8個c檔案組成。我們講述寫乙個簡單的makefile,來描述如何建立最終的可執行檔案 edit 此可執行檔案依賴於8個c原始檔和3個頭檔案。makefile檔案的內容如下 sample makefile edit ma...
編寫簡單的makefile
假如有乙個上百個檔案的 構成的專案,如果只是對其中乙個或少數幾個檔案進行了修改,若用gcc編譯工具就不得不把整個專案裡的檔案重新編譯一遍。編譯過程分為編譯 彙編鏈結等階段。其中,編譯階段僅檢查語法錯誤以及函式與變數的宣告是否正確,在鏈結階段則主要完成函式鏈結和全域性變數的鏈結。因此,沒有改動的源 根...
最簡單的makefile
hello.c的內容如下 include int main makefile 的內容如下 hello.exe hello.o gcc o hello.exe hello.o hello.o hello.c gcc c hello.c clean rm hello.o hello.exe window...