转向 C++:没有规则可以使 file.o 需要目标 file.c

Moving to c++: no rule to make target file.c needed by file.o

我有一个使用 autoconf/automake 的 C 源代码库,现在应该使用 C++ 编译器对其进行编译。

所以我将所有文件从 .c 重命名为 .cpp 并相应地更改了所有 makefile。但是我收到以下错误(例如):

make[3]: *** No rule to make target 'tmsConfigFiles.c', needed by 'tmsConfigFiles.o'.  Stop.

Makefile主要由

组成
bin_PROGRAMS = configparser

configparser_SOURCES = tmsConfigFiles.cpp tmsMoreFiles.cpp tmsEvenMoreFiles.cpp

AM_CXXFLAGS = -I .. -DSOME_DEFINE -Wall -Wextra -etc

这适用于源代码的绝大部分(其中一些从一开始就是 cpp),但对于某些文件,会出现上述错误消息。尝试清理和 autoreconf -is 等都无济于事。

相同的修改在 Centos 6 上有效,有时在 Centos 7 上失败,在我的 Arch box 上总是失败。

有人在 autotools 中遇到过类似的错误或知道解决方法吗?

我能想到的显而易见的事情是你在更改 Makefile.am 后没有重新执行 automake(或更准确地说 autoreconf),并且出于某种原因(有有多种方法可以实现)你没有启用维护模式。

不过,这是假设您实际上是在开始编辑 Makefile.am。如果您确实编辑了 Makefile,那么问题就相反了,automake 正在做正确的事情并通过重新生成不应编辑的文件完全忽略您的更改。

git clean -fx 没有删除 .deps 目录。

手动删除它们解决了问题。