gpt4 book ai didi

assembly - 使: Circular dependency dropped

转载 作者:行者123 更新时间:2023-12-02 20:14:11 24 4
gpt4 key购买 nike

我已经在 stackoverflow 和其他 make 手册、网站上搜索了很长时间,但找不到任何尾随空格或错过 make 函数的用法。你能帮我解决这个警告消息吗?

make: Circular main.asm.o <- main.asm dependency dropped.

生成文件:

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

main.asm:

section .text
global main
extern exit

main:
mov rdi, 1
call exit

谢谢你:)

最佳答案

您的错误是这一行:

%.o: $(SOURCES)

大概会扩展为类似的内容

%.o: main.asm foo.asm bar.asm

这意味着非常类似于

main.asm.o: main.asm
foo.asm.o: foo.asm
bar.asm.o: bar.asm
....

这是“大约”,因为您在这里混淆了语法。

您将普通规则 (target: source) 与通配符规则 (%.target: %.source) 混淆了。您可能想要的是

%.o: %.asm
$(AS) $(ASFLAGS) -o $@ $<

它教Make如何从.asm文件创建.o文件,并结合

httpd: $(SOURCES:.asm=.o)
$(CC) $(CFLAGS) -o httpd $*

它告诉 Make 如何将各种 .o 文件组合到 httpd 可执行文件中。 $(SOURCES:.asm=.o) 变量引用扩展为 .o 文件列表作为依赖项,Make 现在知道如何创建这些 。 o 文件来自相应的 .asm 文件。

额外观察:

  1. 如果不明显,$(SOURCES:.asm=.o) 所做的就是扩展为 $(SOURCES) 的值,但尾随.asm 替换为 .o
  2. 我个人会对此 Makefile 执行的操作是用显式文件列表替换 SOURCES 定义中的通配符。这样,如果您将 my-temp-test.asm 文件添加到目录中,就不会得到意外结果。 (这属于“我怎样才能对 future 的我好?”的标题)

关于assembly - 使: Circular dependency dropped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com