Makefile簡單的配置

2022-07-21 03:12:09 字數 1849 閱讀 9710

一、檔案配置目錄

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等變數

如下:

#folders

srcdir := 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...