#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文件或solaris上的输入行做什么来使其工作。
在查理·伯恩斯的评论中回答以下
答案 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)
。