-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

当我键入时,这个makefile在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

这条规则的另一个问题是它告诉 make 它会构建一个文件prog-%-gcc(对于 的某个值%),但它在撒谎。它实际上构建了一个完全不同的文件,prog-%.out. 因此,每次运行 make 时,make 都会重建所有目标。该规则应为:

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

真的你应该在规则中设置CC = gcc和使用。$(CC)

于 2013-10-22T03:56:29.340 回答