Ero*_*rol 4 assembly makefile yasm
我已经在stackoverflow和其他制作手册,网站上搜索了很长时间,但找不到任何尾随空格或错过make函数中的用法.你能帮我解决这个警告信息吗?
make: Circular main.asm.o <- main.asm dependency dropped.
Run Code Online (Sandbox Code Playgroud)
Makefile文件:
AS:=yasm
CC:=gcc
OUTPUTDIR:=$(shell pwd)/bin
ASFLAGS:=-g dwarf2 -f elf64 -a x86
CFLAGS:=-g
SOURCES=$(wildcard *.asm)
OBJECTS=$(patsubst %.asm,%.o,$(SOURCES))
%.o: $(SOURCES)
$(AS) $(ASFLAGS) -o $(OUTPUTDIR)/$(OBJECTS) $<
all: $(OBJECTS)
$(CC) $(CFLAGS) -o httpd $(OUTPUTDIR)/$(OBJECTS)
clean:
rm $(OUTPUTDIR)/*
rm httpd
Run Code Online (Sandbox Code Playgroud)
main.asm中:
section .text
global main
extern exit
main:
mov rdi, 1
call exit
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
Nor*_*ray 11
你的错误是这一行:
%.o: $(SOURCES)
Run Code Online (Sandbox Code Playgroud)
这可能会扩展到类似的东西
%.o: main.asm foo.asm bar.asm
Run Code Online (Sandbox Code Playgroud)
这意味着什么是非常接近的
main.asm.o: main.asm
foo.asm.o: foo.asm
bar.asm.o: bar.asm
....
Run Code Online (Sandbox Code Playgroud)
那是'大约',因为你在这里混淆了语法.
您将普通规则(target: source)与通配符规则(%.target: %.source)混淆.你可能想要的是什么
%.o: %.asm
$(AS) $(ASFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)
其中教授如何.o从.asm文件中制作文件,并结合使用
httpd: $(SOURCES:.asm=.o)
$(CC) $(CFLAGS) -o httpd $*
Run Code Online (Sandbox Code Playgroud)
告诉Make如何将各种.o文件组合成httpd可执行文件.该$(SOURCES:.asm=.o)变量引用扩展到列表.o的依赖文件,使现在知道如何创建那些.o从相应的文件.asm的文件.