makefile没有检测到新的保存文件

时间:2012-05-25 22:02:17

标签: makefile makefile-project

发生了奇怪的事情:

makefile的想法是能够同时编译多个文件。如果您编辑其中一个文件,则在键入make时,唯一应编译的文件是已编辑的文件。

现在,由于某种原因,我的makefile决定停止识别文件何时发生变化。所以我必须:make cleanmake再次能够编译,这是荒谬的,因为每次我需要编译大约需要1分钟。

为什么会发生这种情况?

我没有在makefile中添加任何内容;它刚刚开始无处可去。

1 个答案:

答案 0 :(得分:2)

有些事情发生了变化;程序不会停止工作,除非发生变化。困难将是解决改变的问题。您可以随时输入:

 rm file-that-changed.o
 make

只重建一个已更改的文件,但这很麻烦。

是否存在多步编译并且您有一个中间文件,这会让make感到困惑?

  

我只是在多步编辑中混淆了。


如果你有一个非标准的文件后缀,你编译成C代码,然后从C编译成目标代码(或任何其他类似的多步编译),那么用make获得可靠的重新编译的关键是组织后缀列表,以便您的扩展在一开始。不幸的是,没有标准的简单方法来了解内置后缀列表是什么,所以你最终不得不做这样的事情:

SUFFIXES     = .y .l .c .o       # Yacc, Lex, C, Object files
EXTRA_SUFFIX = .xc               # Extreme C, or Extended C, or ...

.SUFFIXES:                       # Eliminate all built-in suffixes
.SUFFIXES: ${EXTRA_SUFFIX} ${SUFFIXES}

第二行.SUFFIXES行将您的扩展名放在列表的前面。现在,您可以编写规则以将.xc文件编译为.c.o文件,然后在修改.xc文件时,即使存在中间.c文件1}}文件左右,.xc.c.o文件更新的事实将确保重新编译完成。

很久以前,Sun make版本提供了一个名为SUFFIXES的宏,其中包含了正确顺序的默认后缀。遗憾的是,这没有采用和标准化,所以你必须自己构建后缀列表。但宏观名称的选择并非完全偶然。

相关问题