Linux開發 Makefile基礎和通用模板

2021-09-27 14:07:43 字數 4025 閱讀 3302

目錄前言

c語言編譯過程:

gcc命令:

debug巨集定義快捷方法:

makefile

makefile多檔案通用格式:

cat  /etc/*release  檢視系統版本資訊

更新原始檔  sudo gedit /etc/apt/sources.list

安裝ssh命令 sudo apt-get install openssh

1.預編譯(生成.i檔案)  命令# gcc -e -o hello.i hello.c    作用: 標頭檔案展開和.c檔案合併

2.轉彙編(.s)命令# gcc -s -o hello.s hello.i   作用:

3.編譯(.o)命令# gcc -c -o hello.o hello.s  作用:彙編轉二進位制機器命令

-d   加debug  使用方法:gcc -ddebug=1 -o hello hello.c

-i  指定include檔案目錄,

-l  指定鏈結庫目錄   -l指定該目錄下的庫名稱 

-o 優化指令  -o1 1級優化 -o3 3級優化

-wall  嚴格警告,有警告不能執行通過

#define debug(1)

#if debug

#define debug_log(fmt,args...) do while(false)

#else

#define debug_log(...)do {}while(false)

#endif

組成:顯式規則  隱式規則  變數定義  檔案指示  注釋

基本格式:

目標:依賴

命令

hello.gcc:hello.c

gcc -o hello.gcc hello.c

變數:  引用方式: $(變數名)

object := hello.o haha.o

object += hehe.o

尾目標   .phony:          執行方式:make clean

.phnoy:

clean:

rm -rf *.o hello.gcc

萬用字元                   %(任意乙個)  *(所有)  ?(匹配乙個)

$@ 目標檔案  $^ 依賴檔案  $< 第乙個依賴檔案

%.o:%.c

gcc -c $^ -o $@

增加函式後的通用格式

filesrc = $(wildcard *.c)

obj_dep = $(patsubst %.c,%.o,$(filesrc))

target = hello.gcc

cc = gcc

ccflash = -o

libs = -l/usr/lib

include = -i/usr/include

define = -ddebug

optimize = -o0

$(target):$(obj_dep)

$(cc) $(include) $(libs) $(define) $(optimize) $(ccflash) $@ $^

.phony:

clean:

rm -rf $(object) $(target)

makefile檔案執行shell指令碼檔案

make -c ./ f $(shell pwd)/makefile.bluid
根目錄下的makefile

target:生成的目標檔名

cc 編譯器   。。。。。。

target   = hello

cc = gcc

ccpara = -g -o

ld = ld

libsdir = -l/usr/local

libs =

include = -i$(shell pwd)/include/

define = -ddebug

optimize = -o0

topdir = $(shell pwd)

export cc ccpara ld libsdir libs include define optimize topdir

obj-y += main.o

obj-y += tool_mode/

obj-y += agreement/

all:

make -c ./ -f $(topdir)/makefile.build

$(cc) $(include) $(libsdir) $(define) $(optimize) -o $(target) built-in.o $(libs)

# objcopy --only-keep-debug $(target) $(target).symbols

# objcopy --strip-debug $(target) $(target).release

# strip $(target).release

# rm -f $(target)

clean:

rm -rf $(shell find -name "*.o")

rm -rf $(target)

# rm -f $(target).symbols $(target).release

distclean:

rm -f $(shell find -name "*.o")

rm -f $(shell find -name "*.o")

rm -f $(target)

# rm -f $(target).symbols $(target).release

根目錄下的makefile.build

phony := __build

__build:

obj-y :=

subdir-y :=

include makefile

#obj-y: a.o b.o c/ d/

__subdir-y := $(patsubst %/,%,$(filter %/,$(obj-y)))

subdir-y += $(__subdir-y)

#c/built-in.o d/built-in.o

subdir_objs := $(foreach f,$(subdir-y),$(f)/built-in.o)

#a.o b.o

cur_objs := $(filter-out %/, $(obj-y))

dep_files := $(foreach f,$(cur_objs),.$(f).d)

dep_files := $(wildcard $(dep_file))

ifneq ($(dep_files),)

include $(dep_files)

endif

phony += $(subdir-y)

__build : $(subdir-y) built-in.o

$(subdir-y):

make -c $@ -f $(topdir)/makefile.build

built-in.o : $(cur_objs) $(subdir_objs)

$(ld) -r -o $@ $^

dep_file = [email protected]

%.o : %.c

$(cc) $(include) $(libsdir) $(libs) $(define) $(optimize) -c $(ccpara) $@ $<

.phony : $(phony)

每個資料夾下的檔案需要在makefile中新增

obj-y += haha.o

linux下的C語言開發(makefile編寫)

標籤 makefile linux語言c 工具測試 2012 01 12 18 22 22628人閱讀收藏 舉報 linux開發 16 作者同類文章x 首先編寫add.c檔案,cpp view plain copy print?include test.h include int add int a...

開發記錄 Makefile快速入門

這裡簡單說一下makefile的寫法,主要是個人的喜歡寫法,複雜的語法部門沒有加入,只是一些簡單的入門,同時也是我經常使用的。在makefile中也是有一些我們常用的函式的,簡單的比如 主要功能就是增加字首,用法如下 addprefix prefix,names.例子 addprefix src f...

linux程式設計 makefile檔案

今天我想說說這個makefile檔案了,makefile檔案?可能是我孤陋寡聞吧,原來在windows平台上我還真沒有聽說過這個東東,其實也是有的,只是我們沒有接觸到罷了。makefile檔案,是個什麼東西?有什麼用?怎麼來寫?這就是我要說的。我們都清楚,用傳統c c 語言開發乙個程式,都要經歷這幾...