-2
#compile time flags
CFLAGS=-Wall -Werror
CC=gcc
all:    prog-1-gcc prog-2-gcc prog-3-gcc prog-4-gcc prog-5-gcc prog-6-gcc \
        prog-7-gcc prog-8-gcc prog-9-gcc prog-10-gcc prog-11-gcc prog-12-gcc \        
        prog-13-gcc prog-14-gcc prog-15-gcc prog-16-gcc prog-17-gcc prog-18-gcc \        
        prog-19-gcc prog-20-gcc prog-21-gcc
all-gcc:    all
run:    run-1-gcc run-2-gcc run-3-gcc run-4-gcc run-5-gcc run-6-gcc \
        run-7-gcc run-8-gcc run-9-gcc run-10-gcc run-11-gcc \
        run-12-gcc run-13-gcc run-14-gcc run-15-gcc run-16-gcc \
        run-17-gcc run-18-gcc run-19-gcc run-20-gcc run-21-gcc
run-gcc:    run
prog-%-gcc: prog-%.c
    $(CC) $(CFLAGS) $< -o prog-$*.out
run-%-gcc:  prog-%.out
    -./prog-$*.out
make clean:
    rm -f all *.out

このメイクファイルを入力すると、solaris9 マシンでこのエラーが表示されます

bash-2.05$ make prog-9-gcc
make: Fatal error: Don't know how to make target `prog-9-gcc'

これは、make clean ルールを含むすべてのルールで発生します。このバグで数日間立ち往生しているので、誰かの意見をいただければ幸いです。ありがとう!また、この makefile は centos マシンで 100% 完全に実行されることにも言及する必要があります。

質問: C ファイルをコンパイルおよび実行するときに、make ファイルまたは solaris の入力行にこれを機能させるにはどうすればよいですか。

チャーリー・バーンズのコメントで以下に回答

4

1 に答える 1

0

prog-9-gccこのルールは、ファイルからビルドできるように make に指示しますprog-9.c。したがって、make がそのエラーを出している場合はproc-9.c、ディレクトリにファイルがないことを意味します。

prog-%-gcc: prog-%.c
        gcc $(CFLAGS) prog-$*.c -o prog-$*.out

このルールのもう 1 つの問題は、ファイルを作成するようにprog-%-gcc( の値に対して%) make に指示しているが、それが嘘をついていることです。実際には、まったく異なるファイルprog-%.out. このため、make を実行するたびに、make はすべてのターゲットを再構築します。このルールは次のようになります。

prog-%-gcc: prog-%.c
        gcc $(CFLAGS) $< -o $@

本当にルールで設定CC = gccして使用する必要があります。$(CC)

于 2013-10-22T03:56:29.340 に答える