make:循环依赖关系丢失

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的文件.