Assembly 获得;没有规则来创建target.s

Assembly 获得;没有规则来创建target.s,assembly,makefile,Assembly,Makefile,我知道以前有人问过,但我无法解决这个问题。 我明白了:没有规则将目标设置为'remww.s',这是'remww.o'所需要的。停止 这是我的生成文件: all: clean $(MAKECMDGOALS) %: echo '(load "project.scm") (compile-scheme-file "$(MAKECMDGOALS).scm" "$(MAKECMDGOALS).s")' | scheme -q $(MAKECMDGOALS).o: $(MAKECMDGOAL

我知道以前有人问过,但我无法解决这个问题。 我明白了:没有规则将目标设置为'remww.s',这是'remww.o'所需要的。停止 这是我的生成文件:

all: clean $(MAKECMDGOALS)

%:

    echo '(load "project.scm") (compile-scheme-file "$(MAKECMDGOALS).scm"
 "$(MAKECMDGOALS).s")' | scheme -q

$(MAKECMDGOALS).o: $(MAKECMDGOALS).s

    nasm -f elf $(MAKECMDGOALS).s -o $(MAKECMDGOALS).o

$(MAKECMDGOALS): $(MAKECMDGOALS).o

    gcc -m32 -Wall -g $(MAKECMDGOALS).o -o $(MAKECMDGOALS)

.PHONY: clean

clean: 
    rm -f *.o $(MAKECMDGOALS)

我尝试了“make remww”,并且remww.scm也存在于我的目录中。我回显的scheme程序运行正常,在独立运行时创建remww.s文件并手动输入参数。

我必须承认我不是Makefile语法专家,但我不知道下面这行应该做什么:

%:
如果要告诉
make
可以从文件
$(MAKECMDGOALS).scm创建文件
$(MAKECMDGOALS).s
,则该行应替换为以下行:

$(MAKECMDGOALS).s: $(MAKECMDGOALS).scm
。。。您的Makefile应该可以正常工作

我自己也会尝试摆脱大多数规则中的
$(MAKECMDGOALS)
。这应该可以通过以下方式实现,但是我不是100%确定,因为这个Makefile包含一些特性…:

%.s: %.scm
    echo '(load "project.scm") (compile-scheme-file "$<" "$*")' | scheme -q

%.o: %.s

    nasm -f elf $< -o $*

%: %.o

    gcc -m32 -Wall -g $< -o $*
%.s:%.scm

echo'(加载“project.scm”)(编译方案文件“$我必须承认我不是Makefile语法方面的专家,但我不知道下面这行应该做什么:

%:
如果要告诉
make
可以从文件
$(MAKECMDGOALS).scm创建文件
$(MAKECMDGOALS).s
,则该行应替换为以下行:

$(MAKECMDGOALS).s: $(MAKECMDGOALS).scm
…您的Makefile应该可以正常工作

我自己也会尝试在大多数规则中去掉
$(MAKECMDGOALS)
。这应该可以通过以下方式实现,但是我不是100%确定,因为此Makefile包含一些特殊功能…:

%.s: %.scm
    echo '(load "project.scm") (compile-scheme-file "$<" "$*")' | scheme -q

%.o: %.s

    nasm -f elf $< -o $*

%: %.o

    gcc -m32 -Wall -g $< -o $*
%.s:%.scm

echo'(加载“project.scm”)(编译方案文件“$目标后面的空行:先决条件行实际上不存在,是吗?否则您的make会抱怨另一个错误。您能编辑您的示例以正确显示当前情况吗?此make文件有很多问题…首先,
all:clean$(MAKECMDGOALS)
引入了竞争条件。如果您执行了
生成-j xxx.o
,它将在调用
rm-f*.o xxx.o
的同时生成xxx.o。根据不同处理器上的负载,它可以先生成xxx.o,然后立即生成它(这将是一个不明显的失败)。此外@Martin是正确的--请删除对
$(MAKECMDGOALS)
的引用,因为它们都容易出错(请考虑是否指定了多个目标…)。在%之后有一行空行:…我试图告诉makefile,$(MAKECMDGOALS).s将在我响应的sceme程序运行期间创建。在这一行完成之前,它不在那里。它的评估不要在文章末尾添加一个新问题,从而使现有答案无效。仅供参考,空行是可以的。对于习惯于阅读“正常”的人来说,它们看起来很奇怪makefiles,但make没有问题。目标:先决条件行之后的空行实际上不存在,是吗?否则,make会抱怨另一个错误。能否编辑示例以正确显示当前情况?此makefile存在许多问题…首先,
all:clean$(MAKECMDGOALS)
引入了竞争条件。如果您使用
生成-j xxx.o
,它将在调用
rm-f*.o xxx.o
的同时生成xxx.o。根据不同处理器上的负载,它可以先生成xxx.o,然后再立即生成它(这将是一个不明显的失败)。此外@Martin是正确的--请删除对
$(MAKECMDGOALS)
的引用,因为它们都容易出错(请考虑是否指定了多个目标…)。在%之后有一行空行:…我试图告诉makefile,$(MAKECMDGOALS).s将在我响应的sceme程序运行期间创建。在这一行完成之前,它不在那里。它的评估不要在文章末尾添加一个新问题,从而使现有答案无效。仅供参考,空行是可以的。对于习惯于阅读“正常”的人来说,它们看起来很奇怪makefiles,但make没有问题。嘿..首先谢谢。我尝试了您的建议,所以我将makefile更改为:%.s:%.scm echo'(加载“project.scm”)(编译方案文件“$Hey..首先谢谢。我尝试了您的建议,所以我将makefile更改为:%.s:%.scm echo'(加载“project.scm”)(编译方案文件)$