【发布时间】:2018-01-27 00:18:05
【问题描述】:
我正在学习如何使用 C 和 Make,但 Make 让我抓狂。当我使用我创建的所有目标运行 make 时,它会失败,运行不带参数的 gcc,except 其中一个随机运行就可以了。当我尝试使用大多数目标进行构建时,会发生以下情况:
$ make strvector.o
gcc
gcc: fatal error: no input files
compilation terminated.
make: *** [vector.o] Error 4
当我运行那个有效的时候:
$ make word.o
gcc -Wall -g -ansi -pedantic -c -o word.o word.c
这是我的生成文件:
CC = gcc
CFLAGS = -Wall -g -ansi -pedantic -c -o $@ $^
LD = gcc
LDFLAGS =
fw: fw.o vector.o hashtable.o strvector.o
$(LD) $(LDFLAGS) -o fw vector.o hashtable.o strvector.o word.o
fw.o: fw.c vector.o hashtable.o strvector.o word.o
$(CC) $(CFALGS)
vector.o: vector.c word.o
$(CC) $(CFALGS)
hashtable.o: hashtable.c vector.o word.o
$(CC) $(CFLAGS)
word.o: word.c
$(CC) $(CFLAGS)
strvector.o: strvector.c
$(CC) $(CFALGS)
我终其一生都无法弄清楚为什么 word.o 构建得很好,但没有其他任何东西。如果有人可以提供帮助,将不胜感激。
--编辑-- 我打错了。写 CFALGS 而不是 CFLAGS。不知道我是怎么错过的。谢谢大家!
【问题讨论】:
-
嗯,
CFALGS没有定义,所以变成了空字符串。 -
你最好设置
CFLAGS=-Wall -g -ansi -pedantic而不定义任何规则。 Make的隐式规则很好,-o ...和要操作的文件不属于CFLAGS。 -
您分配了 CFLAGS,但您没有分配 CFALGS。这是一个错字。
-
带有
$(CC) $(CFLAGS)的命令行没有任何文件名参数。