2

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

4

2 回答 2

4

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

但是,您的方法存在一个问题:您可以找出包含的头文件main.cpp,没问题,但是如果您想.cpp为头文件编译相应的文件,这些实现文件通常需要其他未直接或间接包含的头文件frommain.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++,但我希望这是一个开始。

于 2013-03-15T18:13:27.527 回答
1

将您的代码库编译成静态库(Windows 上的 .lib)。除非您修改代码库,否则您只需执行一次 - 即使这样您也只需要重新编译您更改的代码。

在您的可执行项目中,包含您正在使用的任何标头,并将库包含在您的链接器设置中。链接器只会将可执行文件实际使用的编译定义(来自静态库中的目标文件)链接到最终的 .exe 中。

于 2013-03-15T20:16:12.787 回答