c++ - 是否有自动检测我应该编译哪些 .cpp 源文件的方法(取决于#include *.h)

标签 c++ c compilation

我有旧的大代码库,因为我只需要我的主要功能的一小部分我正在寻找一种方法来自动检测所需的 .cpps(假设它们在同一个文件夹中并且具有与 .h 匹配的名称文件)。
不幸的是,我仍然需要很多代码,所以手工检查代码是不可能的。 是否有工具可以从我的“main.cpp”开始并递归地找出所有需要的 .h 文件,这样我就可以做简单的字符串替换 (.h -> .cpp) 并将其提供给编译器。

最佳答案

大多数编译器都可以为您完成此操作,例如 GCC 和 Clang 提供 -M-MM 来列出源文件的所有依赖项。还有其他选项可以排除系统 header 等。有关详细信息,请参阅您的编译器文档,或者,如果您需要帮助,请告诉我们您使用的是哪个编译器。

虽然你的方法有一个问题:你可以从 main.cpp 中找出包含的头文件,没问题,但是如果你想编译相应的 .cpp 头文件的文件,这些实现文件通常需要其他头文件,这些头文件不是直接或间接包含在 main.cpp 中的,您需要 .cpp 文件>那些标题也是如此。冲洗并重复。 :)

如果手动迭代查找 .cpp 文件的过程不是一个选项,您可以使用 Makefile:

CPPFILES := $(wildcard *.cpp)
DEPFILES := $(CPPFILES:%.cpp=%.d)

%.d: %.cpp
    g++ -MM $< -o $@

include $(DEPFILES)

%.o: %.cpp
    @echo "$@"

%.h: %.o
    @:

然后调用

make main.o

然后让 make 找出还需要哪些其他文件。以上当然是一个简化的示例,您可能有更复杂的目录结构,您可能需要为 g++ 添加一些编译选项,但我希望这是一个开始。

关于c++ - 是否有自动检测我应该编译哪些 .cpp 源文件的方法(取决于#include *.h),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438806/

相关文章:

c++ - 有哪些 C++ 智能指针实现可用?

c++ - 类方法可以同时是内联的和静态的吗?

c - 为什么 C 不创建我的链表头?

c++ - 共享库、库依赖

c++ - 函数返回的字符串文字的生命周期

c++ - 未指定字符串

c - 如何输出比分配的内存长的字符串

c - 在不使用 If else 的情况下找出两个数字的最大值和最小值?

python - 编译python模块扩展时如何静态链接库

java - 用于 build 项目的图书馆?我可以使用 C++ 编译 C++,或者使用 python 编译 java,或者使用 C++ 编译 java 等吗?