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的編寫 工作原理 依賴不存在,就向下搜尋下面的規則,如果找到用來生成...