0

ターゲットとオブジェクトをそれぞれ bin/ と obj/ ディレクトリにコピーする Makefile を作成しようとしています。

それでも、実行しようとすると、次のエラーが発生します。

nasm -f elf64 -g -F stabs main.asm -l spacelander.lst
ld -o spacelander obj/main.o
ld: cannot find obj/main.o: No such file or directory
make: *** [spacelander] Error 1
Why is this happening?

アップデート

エラーを投稿したときに、空白のエラーが原因であることに気付きました。それらを処理した後も、前に述べた古いエラーに置き換えた新しいエラーが引き続き発生します。

これは何ですか??

更新 2

-dMakefile ソースの下にフラグ出力を掲載しました。


ソース

ASM  := nasm
ARGS := -f
FMT  := elf64
OPT  := -g -F stabs

SRC    := main.asm

OBJDIR := obj 
TARGETDIR := bin

OBJ    := $(addprefix $(OBJDIR)/,$(patsubst %.asm, %.o, $(wildcard *.asm)))
TARGET := spacelander

.PHONY: all clean

all: $(OBJDIR) $(TARGET)

$(OBJDIR): 
    mkdir $(OBJDIR)

$(OBJDIR)/%.o: $(SRC)
    $(ASM) $(ARGS) $(FMT) $(OPT) $(SRC) -l $(TARGET).lst

$(TARGET): $(OBJ)
    ld -o $(TARGET) $(OBJ)

clean:
    @rm -f $(TARGET) $(wildcard *.o)
    @rm -rf $(OBJDIR)

make -d出力 - 注: 出力は本文の文字数が多すぎるため、ペーストビン化されます

http://pastebin.com/3bctGJxs

4

1 に答える 1

1

ジョナサン・レフラーがコメントで言ったことは正しいです。$(OBJDIR)/%.o: $(SRC)ルールはソースをオブジェクト ファイルにコンパイルしますが、nasmそのオブジェクト ファイルを保存する場所を指定していません。obj/main.oこれは、リンカーによって見つからないというリンク エラーが発生する理由を正確に説明してnasmいますobj/main.o。を追加してみてください-o <output>

$(OBJDIR)/%.o: $(SRC)
    $(ASM) $(ARGS) $(FMT) -o $@ $(OPT) $(SRC) -l $(TARGET).lst

この回答はコミュニティ wikiとしてマークされています。Jonathan Lefflerに感謝します。

于 2012-09-29T03:25:07.903 に答える