Makefile的使用與分析5

2021-09-25 04:44:59 字數 2313 閱讀 1365

a.c

int main()

b.c#include #include "b.h"

void fun_b()

b.h#define b 1

執行make

gcc    -c -o a.o a.c

gcc -c -o b.o b.c

gcc -o test a.o b.o

./test結果是

this is b = 2
修改b.h為

#define b 2
執行make

make: `test' is up to date.
所以進一步修改makefile為

test:a.o b.o

gcc -o test a.o b.o

b.o:b.c b.h

%.o:%.c

gcc -c -o $@ $<

clean:

rm *.o test

.phony:clean

當再次修改b.h時,就不會出現以上現象

gcc -m b.c 列印出b.c的依賴

gcc -m -mf b.d b.c把依賴關係儲存在b.d檔案

gcc -c -o b.o b.c -md -mf b.d編譯b.o並把依賴關係儲存在b.d檔案

cat b.d

(注意!!! 你看下面的格式是不是和上面的b.o:b.c b.h 很像那,對下面就用利用這一點)

b.o: b.c /usr/include/stdio.h /usr/include/features.h \

/usr/include/i386-linux-gnu/bits/predefs.h \

/usr/include/i386-linux-gnu/sys/cdefs.h \

/usr/include/i386-linux-gnu/bits/wordsize.h \

/usr/include/i386-linux-gnu/gnu/stubs.h \

/usr/include/i386-linux-gnu/gnu/stubs-32.h \

/usr/lib/gcc/i686-linux-gnu/4.6/include/stddef.h \

/usr/include/i386-linux-gnu/bits/types.h \

/usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \

/usr/include/_g_config.h /usr/include/wchar.h \

/usr/lib/gcc/i686-linux-gnu/4.6/include/stdarg.h \

/usr/include/i386-linux-gnu/bits/stdio_lim.h \

/usr/include/i386-linux-gnu/bits/sys_errlist.h b.h

改進makefile,使其變得更加通用

objs = a.o b.o

dep_files := $(patsubst %,.%.d,$(objs))

dep_files := $(wildcard $(dep_files))

test:$(objs)

gcc -o test a.o b.o

ifneq ($(dep_files),)

include $(dep_files)

endif

%.o:%.c

gcc -c -o $@ $< -md -mf [email protected]

clean:

rm *.o test

disclean:

rm -rf $(dep_files)

.phony:clean

makefile中include的用法:

makefile初探4-引用其他的makefile(include)

(patsubst %,.%.d,(ob

js))

,(objs)),

(objs)

),(wildcard $(dep_files))用法:

makefile的使用與分析4–makefile的函式

ifneq ($(dep_files),)

include $(dep_files)

endif

相當於b.o:b.c b.h

makefile 與 庫的使用

makefile 與 庫的使用 庫 庫 庫就是把平時用的或者乙個專案中所用的重複的 集中放在乙個目錄下,一般是做成靜態庫或者動態庫的形式放在乙個地方,每次需要使用的時候鏈結以下就可以了。庫放置的地方和形式下面將會分開說。靜態庫 如果程式時在編譯時載入庫的檔案的就使用靜態庫。也就是說使用靜態庫的時候,...

makefile的簡要分析

ifneq kernelrelease kernelrelease是乙個變數 這句話的意思是,如果kernelrelease 的值不為空的話,就執行下面的語句 obj m bus.o 算是變數的賦值 obj m是乙個變數,作為乙個模組變數 else else 執行之後的全部語句,直到 endif k...

精簡的makefile示例分析

1 make make 是linux自帶的構建器,構建的規則在makefile檔案中 2 makefile檔名 makefile 或 makefile 3 makefile中的規則 目標 依賴 tab縮排 命令 4 makefile的編寫 工作原理 依賴不存在,就向下搜尋下面的規則,如果找到用來生成...