編寫makefile問題

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

編寫makefile問題

文章ansspend » 週一 11月 17, 2008 2:02 pm

我的makfile 的程式如下:
CFLAGS = $(CROSS_CFLAGS)
STRIP_CMD = $(STRIP) -R .note -R .comment

all: hello.gdb hello

hello.o: hello.c
@echo ""
@echo "[ -- Start to compile hello.c to hello.o -- ]"
$(CC) $(CFLAGS) -c $^
hello.gdb: hello.o
@echo ""
@echo "[ -- Start to link hello.o to hello.gdb -- ]"
$(CC) $(LDFLAGS) $(LINK_S) $^ $(LINK_E) -o $@
hello:
@echo ""
@echo ""
@echo "[ -- Start to strip hello.gdb and produce hello -- ]"
$(STRIP_CMD) hello.gdb -o $@
clean:
rm -rf hello hello.o hello.gdb
include ../cross.mk

cross.mk的程式如下:
##[Tool Chain TOP directory]##########################
TOOL_TOP = /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu

##[GCC and GLIBC LIBRARY path]########################
GCC_LIB_PATH = $(TOOL_TOP)/lib/gcc/arm-9tdmi-linux-gnu/3.4.1
GLIBC_PATH = $(TOOL_TOP)/arm-9tdmi-linux-gnu

##[GCC COMPILER path and flags]#######################
CC = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-gcc
AR = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ar
LD = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ld
AS = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-as
STRIP = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-strip
RANLIB = $(TOOL_TOP)/bin/arm-9tdmi-linux-gnu-ranlib
INSTALL = /usr/bin/install

TARGET_ARCH = arm-linux
CROSS_CFLAGS = -nostdinc -I$(GLIBC_PATH)/include -I$(GCC_LIB_PATH)/include

##[GCC LINKER path and flags]#########################
LD = $(TOOL_TOP)/arm-9tdmi-linux-gnu/bin/ld
LDFLAGS += -Wl,-nostdlib -Wl,-L,$(GLIBC_PATH)/lib -Wl,-L,$(GCC_LIB_PATH) -Wl,-rpath,$(GLIBC_PATH)/lib -Wl,-rpath,/lib -Wl,-rpath-link,$(GLIBC_PATH)/lib -nostartfiles -nodefaultlibs

##[Libraries to be linked]############################
LIBS = -lgcc -lgcc_eh -lc -lgcc -lgcc_eh

LINK_S = $(GLIBC_PATH)/lib/crt1.o $(GLIBC_PATH)/lib/crti.o $(GCC_LIB_PATH)/crtbegin.o
LINK_E = $(GCC_LIB_PATH)/crtend.o $(GLIBC_PATH)/lib/crtn.o $(LIBS)


現在是Linux底下編寫ARM的C指令並且compile,會產生一個執行檔通過tftp可以在arm裡面直接使用,請問如果我要在裡面加入一個副檔名為.s,並且也可以通過tftp傳送到arm直接使用,那個makedile要如何撰寫?
ansspend
可愛的小學生
可愛的小學生
 
文章: 18
註冊時間: 週三 1月 09, 2008 10:50 pm

文章粽子 » 週一 11月 17, 2008 3:19 pm

大哥,你的需求 : "在裡面加入一個副檔名為.s,並且也可以通過tftp傳送到arm直接使用"

1.在裡面, 在哪個東西裡面?
2.想要透過 tftp 傳送到arm . 可以用命令列指令.我檢查了你提供的makefile ,裡面並無提供tftp 上傳的功能喔.
粽子
可愛的小學生
可愛的小學生
 
文章: 30
註冊時間: 週五 2月 22, 2008 1:31 pm

文章ansspend » 週一 11月 17, 2008 3:28 pm

不是啦,透過 tftp 傳送到arm,這個是最後的另外的步驟了,目前我要做的是如何撰寫makefile,將 .c 與 .s 的兩個檔案編譯以及合併成一個執行檔,要請問上面的makefile要加入什麼指令才可以將兩個檔案合併成一個執行檔,像我上面貼的makefile他最後會生成兩個hello.gdb與hello的執行檔,可使用tftp傳送到arm在arm上面輸入./hello就會執行程式了,我的意思就是將 .s與.c 的兩個檔案合併,並且生成執行檔,丟到arm上面後輸入./hello就可以執行程式,這樣瞭解我的問題嗎?
ansspend
可愛的小學生
可愛的小學生
 
文章: 18
註冊時間: 週三 1月 09, 2008 10:50 pm

文章粽子 » 週三 11月 19, 2008 2:18 pm

makefile 的語法如下

標記 : 相依標記
<tab> 命令

所以.要把.c 跟.s 合起來就是

test : test.c test_asm.s
<tab>arm-elf-gcc -o test test.c test_asm.s

makefile 的語法詳情,可以 google://makefile
粽子
可愛的小學生
可愛的小學生
 
文章: 30
註冊時間: 週五 2月 22, 2008 1:31 pm


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客