在solaris 9机器上生成文件错误:不知道如何制作目标

时间:2013-10-21 23:34:20

标签: c linux gcc makefile

#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规则在内的所有规则都会发生这种情况。我很感激任何人的意见,因为我已经被这个bug困住了几天了谢谢!我也应该提一下这个makefile在centos机器上100%完美运行。

问题:在编译和运行我的C文件时,我可以对我的make文件或so​​laris上的输入行做什么来使其工作。

在查理·伯恩斯的评论中回答以下

1 个答案:

答案 0 :(得分:0)

此规则告诉make它可以从文件prog-9-gcc构建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)