linux常用的makefile模版編寫
在linux下面,我們不得不自己寫makefile,makefile的確博大精深,但是實際上對於日常的使用來說,無非就是
1:編譯可執行程式。2:編譯lib庫 3:編譯so庫
本博針對上面三種目的各自寫出了makefile模版,希望對大家有所幫助。
一.編譯可執行程式
當前目錄下制定檔案編譯成可執行檔案(連線外部庫的話只需要更改inc和lib即可)
cxx =g++
target =bitmaploctest
c_flags +=
-g -wall
lib_flags =
-pthread
all :$(target)
bitmaploctest :bitmaploctest.o bitmaploc.o file_lock.o
$(cxx) -o $@ $ ^$(lib_flags) $(lib) $(c_flags)
.cpp.o :
$(cxx) -c -o $ *.o $(inc) $(c_flags) $ *.cpp
.cc.o :
$(cxx) -c -o $ *.o $(inc) $(c_flags) $ *.cc
clean :
-rm -f *.o $(target)
二.編譯成lib庫
當前目錄下指定檔案編譯成lib庫(一般lib庫在編譯的時候不會將使用的外部庫編譯進來,而是等編譯成可執行程式時或者.so時)
inc_dir =. /
src_dir =. /
obj_dir =. /
lib_dir =. /
h_dir =. /
obj_ext =.o
cxxsrc_ext =.cpp
csrc_ext =.c
lib_ext =.a
h_ext =.h
objects =$(obj_dir)bitmaploc$(obj_ext) \
$(obj_dir)file_lock$(obj_ext)
lib_target =$(lib_dir)libbitmaploc$(lib_ext)
$(obj_dir) %$(obj_ext) :$(src_dir) %$(cxxsrc_ext)
@echo
@echo 「compiling $ <
==>$@…」
$(cxx) $(inc) $(c_flags) -c $ <
-o $@
$(obj_dir) %$(obj_ext) :$(src_dir) %$(csrc_ext)
@echo
@echo 「compiling $ <
==>$@…」
$(cc) -i. /$(inc) $(c_flags) -c $ <
-o $@
all :$(lib_target)
$(lib_target) :$(objects)
all :$(objects)
@echo
$(ar) rc $(lib_target) $(objects)
@echo 「ok」
clean :
rm -f $(lib_target) $(objects)
三.編譯成so庫
當前目錄下指定檔案編譯成so庫(必須將所有引用的外部庫都編譯進來)
cc =gcc
cxx =g++
cflags =
-wall -pipe -ddebug -d_new_lic -g -d_gnu_source -shared -d_reentrant
lib =
-lconfig -ldl -lrt -l.. /.. /lib -lttc -g
include =
-i.. /spp_inc
oo =service.o tinystr.o tinyxml.o tinyxmlerror.o tinyxmlparser.o uin_conf.o stat.o
targets =.. /.. /lib /libranch.so
all :$(targets)
stat :tool_stat.cpp
$(cxx) $(include) tool_stat.cpp -o tool_stat stat.o tinystr.o tinyxml.o tinyxmlerror.o tinyxmlparser.o -g
cp tool_stat .. /.. /bin
$(targets) :$(oo)
$(cxx) $(cflags) $(include) $(oo) -o $@ $(libdir) $(lib)
.c.o :
$(cc) $(cflags) -c $(include) $ <
echo $@
.cpp.o :
$(cxx) $(cflags) -c $(include) $ <
echo $@ %:
%.c
$(cc) $(cflags) -o $@ $ <$(oo) $(ldflags)
echo $@
clean :
rm -f *.o
rm -f $(targets)
rm -f tool_stat
ok,我常用的makefile也就這三種格式,希望對大家有用。
linux核心可載入模組的makefile
在開發linux核心驅動時,免不了要接觸到makefile的編寫和修改,儘管網上的makefile模板一大堆,做一些簡單的修改就能用到自己的專案上,但是,對於這些基礎的東西,更應該做到知其然並知其所以然。本篇文章中只討論linux核心模組編譯的makefile,linux核心makefile總覽可以...
Linux核心開發 最簡單的Makefile
最簡單的linux驅動程式 至少需要乙個makefile,乙份源 本文簡單解釋makefile中的各個make target的意義。這裡只是介紹乙個簡單的基礎的makefile,生產環境需要更好的makefile模板和構建工具。示例 obj m helloword.o pwd shell pwd k...
Linux下C語言程式設計基礎 Makefile
假設我們有下面這樣的乙個程式,源 如下 main.c include mytool1.h include mytool2.h int main int argc,char argv mytool1.h ifndef mytool 1 h define mytool 1 h void mytool1 ...