【问题标题】:c - Make is only running 'gcc' with no parametersc - Make 只运行没有参数的“gcc”
【发布时间】: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) 的命令行没有任何文件名参数。

标签: c gcc makefile


【解决方案1】:

您在编译命令中遗漏了文件名。

strvector.o: strvector.c
    $(CC) -c $(CFLAGS) -o $@ $<

$@ 被当前目标替换,$&lt; 被当前依赖替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2021-04-22
    相关资源
    最近更新 更多