較複雜makefile跟lds指令碼程式的編寫

2022-07-17 22:24:26 字數 1842 閱讀 2610

首先看個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 ...