【问题标题】:"Nothing to be done for makefile"“makefile 无事可做”
【发布时间】:2017-01-05 14:43:49
【问题描述】:

首先,谢谢大家。

我花了 3 个小时试图找出问题所在,我在互联网上进行了深入研究,但没有发现任何对我有用的东西。 我尝试了很多以相同方式结束的示例;缺少分隔符或什么都不做。

会是什么?

我的 .c 和 .h 的命名方式相同 3enRayaPunteros.c/h

这是我的 makefile 代码:

Juego: 3enRayaPunteros.o
gcc -o Juego 3enRayaPunteros.o
3enRayaPunteros.o: 3enRayaPunteros.c 3enRayaPunteros.h
    gcc -c 3enRayaPunteros.c

非常感谢:

【问题讨论】:

  • Makefile 的一个常见陷阱是它们需要一个制表符,而不是空格,这不会显示在网站上。
  • 请显示一个实际的 makefile、您调用的实际命令以及您得到的实际错误(通过剪切/粘贴)。像“它不起作用”这样的释义和一般性陈述是无济于事的。 缺少分隔符 通常是因为您在应该使用 TAB 字符时使用了空格(注意它必须是实际的 TAB,因此请确保您的文本编辑器没有“帮助”将您的 TAB 转换为空格) . Nothing to be done 可能意味着实际上不需要做任何事情,或者您的 makefile 可能是错误的,或者您可能错误地调用了 make;我们不知道。

标签: makefile


【解决方案1】:

试试

Juego: 3enRayaPunteros.o
    gcc -o $@ $+

3enRayaPunteros.o: 3enRayaPunteros.c 3enRayaPunteros.h
    gcc -c -o $@ $^

您希望您的可执行文件 Juego 依赖于 .o 文件。该目标文件需要依赖于您的源文件.c, .h, ...

通常的做法是使用$@ 引用目标名称,使用$+ 引用所有先决条件,并使用$^ 引用第一个先决条件。

缺少分隔符通常意味着您混淆了spacestabs。 Make 在这方面非常繁琐,所以 NOT 使用 tabs 缩进除食谱之外的任何内容。无事可做的意思正是信息所说的:对于您要求做的事情,无事可做。

【讨论】:

  • 一定要写make Juego是不对的。关于名为all 的目标没有什么神奇之处;这只是许多 makefile 中的常见约定。默认情况下,make 本身将始终构建它在 makefile 中找到的第一个显式目标,无论其名称是什么。
  • 非常感谢!
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多