我試圖用匯編語言組裝一個由兩個asm文件組成的小型初學者程序。我可以製作一個單獨的文件,但我想嘗試調用另一個文件中的過程。
這裏是我的Makefile:編譯兩個asm文件時出現「nasm:錯誤:指定了多個輸入文件」
NAME = formatter
SRCS = formatter.asm clearstring.asm
OBJS = $(SRCS:.asm=.o)`
NASM = nasm
NASMFLAGS = -f elf64 -F dwarf
LD = ld
RM = rm -f
all: $(NAME)
$(NAME): $(OBJS)
$(LD) $(OBJS) -o $(NAME)
#(1):
# formatter.o: formatter.asm
# $(NASM) -o formatter.o formatter.asm $(NASMFLAGS)
# clearstring.o: clearstring.asm
# $(NASM) -o clearstring.o clearstring.asm $(NASMFLAGS)
#(2):
$(OBJS): $(SRCS)
$(NASM) -o $(OBJS) $(SRCS) $(NASMFLAGS)
當使用下注釋代碼(1),一切正常,但是當我用緊湊的代碼(2),make
給我說:
nasm -o formatter.o clearstring.o formatter.asm clearstring.asm -f elf64 -F dwarf
nasm: error: more than one input file specified
nasm: error: more than one input file specified
type `nasm -h' for help
make: *** [formatter.o] Error 1
據我所知,組裝步驟是不對的,但我不能讓它這樣做:
nasm -o formatter.o formatter.asm -f elf64 -F dwarf
nasm -o clearstring.o clearstring.asm -f elf64 -F dwarf
我希望我一直在爲我的第一個闕不夠清晰在這個網站上。
你能幫我嗎?
我不明白這個問題。您已註釋爲(1)的方法是執行此操作的正確方法。你說當你使用它時一切正常。那麼使用它有什麼問題? – MadScientist
替代方法是將一個程序集文件另存爲「%include」。例如,對於純裝配,我通常只有一個包含所有內容的「0index.asm」文件,因此我不必費心使用make(並檢查文件是否更改,並啓動Nasm進程N次,並鏈接,...)。它更快更容易忘記所有這些...... :-) – Brendan
@MadScientist:方法(1)確實有效,但如果我有很多文件需要編譯,編寫和讀取可能有點繁瑣。布倫丹:謝謝你,我用你的方式搜索了一下,這很有趣。我會嘗試 –