我有旧的大代码库,因为我只需要我的主要功能的一小部分我正在寻找一种方法来自动检测所需的 .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/