0

虽然 Make 工作正常,但默认情况下它只编译那些已更改的文件,即使我运行make all. 它说像Nothing to Do

我需要编译所有文件的一种情况是当我更改在多个.c文件中访问的头文件中的某些内容时。但是在我再次打开任何.c文件之前,make 无法识别它。save & quit

Makefile 内容可以在这篇文章中看到:

关于 Makefile 的问题 - 什么是“$+”&这里调用的 .c 文件/依赖项在哪里?

虽然这也是一个问题,但我想在这里讨论的实际问题是不同的。

为了编译所有文件我所做的是我运行make clean它确实删除了所有目标文件然后我make再次运行但这次它给出了一个错误: -

 ....
 mec/gen_crc32table > mec/crc32table.h
 mec/gen_crc32table: 1: mec/gen_crc32table: Syntax error: end of file unexpected    
 (expecting ")")
 make: *** [mec/crc32table.h] Error 2

我检查了内容,crc32table.h但文件为空。crc32table.h因此,我从以前的代码备份中复制,现在它成功运行。现在我make clean再次运行并“制作”以检查它,但这次它工作正常。

不知这里有什么玄机?

我猜这些台词正在做一些我无法理解的事情?请帮助我。

crc32.o: mec/crc32table.h mec/crc32.c
$(CC) -o $@ -c -I. $(CFLAGS) mec/crc32.c

mec/crc32table.h: mec/gen_crc32table
mec/gen_crc32table > mec/crc32table.h 
4

1 回答 1

1

问题是这个片段:

mec/crc32table.h: mec/gen_crc32table
    mec/gen_crc32table > mec/crc32table.h 

问问自己“如果gen_crc32table命令因错误退出会发生什么?” 停止(好)但留下腐败crc32table.h(坏)。两种选择:(i)重新编写gen_crc32table,使其接受-o参数;(ii) 骗局。

(一世)

mec/crc32table.h: mec/gen_crc32table
    mec/gen_crc32table -o mec/crc32table.h 

(二)

mec/crc32table.h: mec/gen_crc32table
    mec/gen_crc32table >temp-file-with-an-obscure-name
    mv temp-file-with-an-obscure-name $@

如果错误mv不会发生。gen_crc32table

于 2013-01-24T15:34:15.173 回答