前面簡單記錄了一下makefile中helloworld的用法,這次來理解一些$@、$^、$《的含義
makefile中,格式為這樣的
target : prerequisties
目標:需要依賴的條件
簡單的工程直接這樣
hello:hello.cc
gcc hello.cc -o hello
但如果檔案多了呢?按部就班寫會顯得很長,所有這時候makefile中的常用命令就產生了,如下:
$@ 表示目標檔案
$^ 表示所有的依賴檔案
$< 表示第乙個依賴檔案
$? 表示比目標還要新的依賴檔案列表
工作作用,將標頭檔案放在include資料夾,cpp檔案放在source資料夾,test.cc為可執行檔案
工程目錄:
.├── include
│ ├── mystring.h
│ └── utils.h
├── makefile
├── source
│ ├── mystring.cpp
│ └── utils.cpp
└── test.cc
makefile檔案為
target = test.out
cxxflags += -std=gnu++11
cc = g++
#主函式檔案
cxx_files := ./test.cc
#cpp檔案
src_dirs := ./source/mystring.cpp
src_dirs += ./source/utils.cpp
inc_dirs := -i ./include
libs += -lstdc++
libs += -ldl -lpthread
$(target):$(cxx_files) $(src_dirs)
$(info target: $@)
$(info all: $^)
$(info first: $
$(info src_dirs_all: $(src_dirs))
$(cc) -o $@ $^ $(inc_dirs) $(cxxflags) $(libs)
.phony:clean
clean:
rm -rf $(target)
輸出結果如下
列印用info,makefile提供了三個命令
$(warning "the value of local_path is$(file)")
$(info "the value of local_path is$(file)")
$(eror "the value of local_path is$(file)
")
Makefile檔案理解
makefile檔案 首先要把原始檔 c或者.cpp 編譯成中間 檔案,在windows下也就是.obj檔案,unix下是.o檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的object file合成執行檔案,這個動作叫作鏈結 link 編譯時,編譯器需要的是語法的...
Makefile 入門知識
這篇文章介紹在linux下進行c語言程式設計所需要的基礎知識。在這篇文章當中,我們將會學到以下內容 源程式編譯 makefile的編寫 程式庫的鏈結 程式的除錯 標頭檔案和系統求助 1.源程式的編譯 在linux下面,如果要編譯乙個c語言源程式,我們要使用gnu的gcc編譯器。下面我們以乙個例項來說...
Makefile簡單入門
作為linux或unix下的程式開發人員,大家一定都遇到過makefile,用make命令來編譯自己寫的程式確實是很方便。一般開發情況下,大家都是手工寫乙個簡單makefile。下面先給乙個最簡單的示例 makefile示例 object main.o function.o change objec...