趣味として、私は単純なコンパイラを書いて、うまく動作することを確認するためのテストファイルをいくつか書きました。私はmakefileにいくつかの行を追加しました。そのため、あるコマンドでコンパイラをコンパイルし、テストファイルをコンパイルし(使用して)、アセンブルしてリンクすることができます。問題は、(コンパイラがリンクされた)オブジェクトファイルを削除してmakeにテストを実行するよう指示した場合、バイナリファイルがまだ存在するにもかかわらず、コンパイラが再コンパイルされるということです。私はmakeにそれをしないように伝えることはできますか? (でも、変更したソースファイルを再コンパイルし、コンパイラを再リンクするようにmakeに指示するオプションが必要です)。私のメイクファイルからオブジェクトファイルを削除した場合、makeに再コンパイルしないよう伝えるには?
いくつかの行:
OBJS=asm.o main.o type.o var.o ...
SAMPLES=arr.out sample.out ...
SAMPASM=arr.asm sample.asm ...
all: myc
myc: ${OBJS}
${CC} ${LDFLAGS} -o myc ${OBJS}
%.o: src/%.c src/myc.h
$(CC) $(CFLAGS) $< -o [email protected]
test: ${SAMPLES} ${SAMPASM}
%.out: %.aso asm/com.aso
ld $< asm/com.aso -o [email protected]
%.aso: %.asm
nasm -f elf64 $< -o [email protected]
%.asm: samples/%.myc myc
./myc $< -o [email protected]
clean:
rm -f *.o *.out *.asm myc
別のディレクトリにテストをビルドする場合、コンパイラが必要なときにコンパイラを再構築して、オブジェクトファイルがない場合、どのようにして保守しますか? – asaelr
これはオブジェクトファイルに依存しません。コンパイラオブジェクトファイルが存在するかどうかは、たぶん偶然それらを使用するためです。 'make'は、コンパイラがソースとヘッダとアセンブラに依存していると言われています。これらのファイルが変更された場合は、*すべて*を再コンパイルします。コンパイラはオブジェクトファイルを生成するかもしれませんが、 'make'は気にしないように言われているので気にしません。 –