目錄前言
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 語言開發乙個程式,都要經歷這幾...