首先看個makefile
範例:
1/*指明工具鏈,並為其取個簡單的別名
*/2 cc = arm-linux-gcc
3 ld = arm-linux-ld
4 ar = arm-linux-ar
5 objcopy = arm-linux-objcopy
6 objdump = arm-linux-objdump7/*
指明標頭檔案的位置
*/8 includedir := $(shell pwd)/include9/*
-wall 提示警告,-o2表示優化選項,最優優化,-fno-builtin表示自己來實現某些庫函式,如果不加此選項會出現衝突
*/10 cflags := -wall -o2 -fno-builtin
11/*
-nostdinc,-nostdlib 表示不使用這兩個庫,-i$(includedir)表示鏈結到頭檔案
*/12 cppflags := -nostdinc -i$(includedir) -nostdlib
1314
/*使這些定義的變數生效
*/15
export cc ar ld objcopy objdump includedir cflags cppflags
1617
/**將.o檔案和lib/目錄下生成的.a靜態庫一起編譯成.elf檔案
*/18 objs := start.o main.o uart.o clock.o lcd.o lib/libc.a
1920
lcd70.bin: $(objs)
21 $ -tlcd70.lds -o lcd70.elf $^ //
主要此處使用了tlcd70.lds這個鏈結器指令碼指明的**的存放位置。
22 $ -o binary -s lcd70.elf $@
23 $ -d lcd70.elf >lcd70.dis
2425
/*指明偽目標,也就是沒有依賴檔案
*/26 .phony : lib/libc.a
27/*
進入目錄中執行make命令生產.a靜態庫
*/28 lib/libc.a:
29 cd lib; make
; cd ..
3031 %.o:%.c
32 $ $(cppflags) $(cflags) -c -o $@ $<
3334 %.o:%.s
35 $ $(cppflags) $(cflags) -c -o $@ $<
3637
clean:
38make clean -c lib
39rm -f *.bin *.elf *.dis *.o
生產靜態庫的makefile:
objs := div64.o lib1funcs.o ctype.o muldi3.o printf.o string.o vsprintf.o
/*生產靜態庫
*/libc.a: $(objs)
$ -r -o $@ $^
/*將.c和.s檔案生成.o檔案
*/%.o:%.c
$ $(cppflags) $(cflags) -c -o $@ $<
%.o:%.s
$ $(cppflags) $(cflags) -c -o $@ $rm -f libc.a *.o
sections.data :
.bss :
}
廣搜題(較複雜)
演算法核心 void bfs int x,int y for int j 1 j 3 j 迴圈走的步數 解釋一下,就是剛開始定義了 這使得讓方向和陣列的i下標對應 先從剛開始的位置開始走,迴圈四個方向,這裡用i的大小 1 4 表示方向,然後如果這個方向需要當前的方向轉兩次就step 2,轉一次就加一...
貓睡覺問題 較複雜模擬
hdu 3700 cat 題目給出乙隻貓每天若干個時間段有任務,沒有任務時貓可以睡覺。題目還給出兩個數a和b,表示貓每次睡覺時間不能少於a小時且每次醒著的時間不能多於b小時。題目要求輸出一天貓可能睡覺的時段,如果沒有滿足條件的睡眠時段輸出 no 本題的關鍵難點在於處理跨日的情況,首先說正常不跨日情況...
用BFS 求最短路(較複雜)
題目鏈結 include include include include include include include include include include include using namespace std define maxn 15 define inf 0x3f3f3f3f ...