是否有自动的方法来检测我应该编译哪些.cpp源文件(取决于#include *.h)
Is there automated way to detect which .cpp source files I should be compiling (depending on #include *.h)
我有旧的大代码库,因为我只需要在我的主要功能的一小部分,我正在寻找一种方法来自动检测所需的。cpps(假设它们在同一文件夹中,并具有与。h文件匹配的名称)。
不幸的是,我仍然需要大量的代码,所以手工浏览代码是不可能的。是否有工具可以从我的"main.cpp"递归地找出所有需要的。h文件,这样我就可以做简单的字符串替换(.h -> .cpp)并将其交给编译器。
大多数编译器可以为您做这些,例如GCC和Clang提供-M
和-MM
来列出源文件的所有依赖项。还有其他选项可以排除系统头文件等。参考你的编译器的文档获取更多信息,或者,如果你需要帮助,告诉我们你正在使用哪个编译器。
你的方法有一个问题,虽然:你可以从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++
添加一些编译选项,但我希望这是一个开始。
将代码库编译为静态库(lib (Windows)。你只需要这样做一次,除非你修改了代码库——即使这样,你也只需要重新编译你修改的代码。
在您的可执行项目中,包括您正在使用的头文件,并在您的链接器设置中包含库。链接器只会将可执行文件实际使用的编译定义(来自静态库中的目标文件)链接到最终的。exe。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- cpp 在主源文件中包括.cpp文件导致错误"duplicate symbol"
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- main.cpp 如何知道包含标头的源文件?
- 如何将包含多个.cpp源文件的文件夹导入Eclipse项目中,每个源文件都有一个main()定义
- 错误 C1083:无法打开源文件:"stdafx.cpp":没有此类文件或目录
- 导出visual studio c++项目以在另一个项目中使用,而不显示.cpp和.h源文件
- 用于配置cpp源文件位置的环境变量
- 如何从另一个.cpp源文件调用main.cpp中定义的方法
- 如何在 Visual 2010 中包括从源文件 (.cpp) 在项目中创建的头文件 (.h)
- 在头中声明变量而不是在源文件(cpp/h)中声明变量有什么区别
- 是否应在头文件或.cpp源文件中指定C++函数的默认参数值
- 用于解析C++源代码并将头内联方法移动到.cpp源文件的工具
- 将源文件拆分为 cpp 和 h 后无法编译项目,获得"未定义的引用..."
- 选择在构建/调试时首先显示源文件(.cpp)
- 是否有自动的方法来检测我应该编译哪些.cpp源文件(取决于#include *.h)
- c++在两个.cpp源文件之间传递动态变量
- 我应该同时使用头文件和cpp/源文件吗?