我有一個baremetal項目,其中包括.s文件旁邊的.s文件。我想知道如何編寫一個makefile文件,其中我明確指出從.c文件編譯.s文件。文件位於程序的子文件夾(源文件,包含文件,啓動文件)中。我正在尋找這樣的事情。這個好嗎?那麼我怎樣才能把對象鏈接到exe文件呢?makefile與.c文件旁邊的.c文件
SHELL := /bin/bash
ROOT := $(shell pwd)
VPATH := $(ROOT)/source:/$(ROOT)/startup:$(ROOT)/include
EXE := exe
OBJECTS_GCC := $(patsubst %.c,%.o,$(wildcard *.c))
OBJECTS_AS := $(patsubst %.s,%.o,$(wildcard *.s))
AS := arm-none-eabi-as -mcpu=arm926ej-s -Wall
GCC := arm-none-eabi-gcc -mcpu=arm926ej-s -Wall
LD := arm-none-eabi-ld -T test.ld -o $(EXE)
all: $(EXE)
$(EXE): startups sources
startups: $(OBJECTS_AS)
$(AS) $(OBJECTS_AS)
sources: $(OBJECTS_GCC)
$(GCC) $(OBJECTS_GCC)
我很難找到任何包含.s文件和.c文件的例子。
問候。
這裏是makefile文件的最新版本,其中header.h心不是發現:
SHELL := /bin/bash
ROOT := $(shell pwd)
INC := $(ROOT)/inc
SRC := $(ROOT)/src
STR := $(ROOT)/str
EXE := exe
AS := arm-none-eabi-as -mcpu=arm926ej-s -c -Wall -I $(INC) -I$(SRC) -I $(STR)
GCC := arm-none-eabi-gcc -mcpu=arm926ej-s -c -Wall -I $(INC) -I$(SRC) -I $(STR)
LDSCRIPT := test.ld
LD := arm-none-eabi-ld -T $(LDSCRIPT)
HEADERS := $(notdir $(wildcard $(INC)/*.h))
SOURCES_GCC := $(notdir $(wildcard $(SRC)/*.c))
SOURCES_AS := $(notdir $(wildcard $(STR)/*.s))
OBJECTS_GCC := $(SOURCES_GCC:.c=.o)
OBJECTS_AS := $(SOURCES_AS:.s=.o)
VPATH := $(STR):$(SRC):$(INC)
all : $(EXE)
@echo konec postopka: izvrsljiv program po imenu $(EXE) se nahaja v mapi $(ROOT)
$(EXE) : $(OBJECTS_AS) $(OBJECTS_GCC)
@echo objekti so: $(OBJECTS_AS) $(OBJECTS_GCC)
@echo headerji so: $(HEADERS)
@echo linkanje objektov v izvrsljiv program...
$(LD) -o [email protected] $^
%.o : %.s %.h
@echo prevajanje ASSEMBLY izvornih datotek...
$(AS) -o [email protected] $<
%.o : %.c %.h
@echo prevajanje C izvornih datotek...
$(GCC) -o [email protected] $<
.PHONY : clean
clean :
@echo brisanje objektov
rm *.o
@echo brisanje izvrsljivega programa
rm $(EXE)
針對更新生成文件,我不知道爲什麼header.h沒有找到,如果它確實在目錄INC存在。但是我注意到,你在其中一個註釋中說過,header.h是你唯一的頭文件,但是你定義的隱式規則爲每個目標文件尋找一個單獨的頭文件。如果只有一個頭文件,並且每個目標文件都依賴於它,則應該明確提及它,而不是使用模式%.h。將模式規則更改爲'%.o:%.s header.h',或從模式規則中刪除%.h,並放入以下行:'$(OBJECTS_AS)$(OBJECTS_GCC):header.h'。 – eriktous 2011-04-11 19:43:38
也許你應該爲這個缺少標題的新問題開始一個新的問題。包含最新的makefile以及運行時收到的確切錯誤消息。 – eriktous 2011-04-11 19:46:18
我確實開始了新的話題,並且設法解決了一些問題。 makefile似乎現在可以工作。這個makefile是另一個具有相同樹結構和inc文件夾中更多頭文件的項目,所以將%.h改爲header.h不是一個選項。請看看這裏:http:// stackoverflow。com/questions/5626606/make-uses-cc-instead-of-arm-none-eabi-as – 71GA 2011-04-14 20:31:49