【发布时间】:2020-01-13 01:15:22
【问题描述】:
我正在使用 C++ 和 cmake 开发我的应用程序。
我想检查每个 C++ 头文件是否正确包含所需的包含文件。
这是一个例子:
a.hpp
inline void func_a() {
}
b.hpp
// #include "a.hpp" is missing
inline void func_b() {
func_a();
}
main.cpp
#include "a.hpp"
#include "b.hpp"
int main() {}
演示:https://wandbox.org/permlink/kZqoNHMYARIB3bc1
b.hpp 应该包含 a.hpp。假设 b.hpp 缺少包含 a.hpp。如果 main.cpp 在 b.hpp 之前包含 a.hpp,则不会发生编译错误。如果包含顺序相反,则会发生编译错误。
我想检查一下这种问题。
我在 emacs 上使用 fly-check。它很好地检查了这个问题。我想在我的 cmake 构建系统中加入一些检查机制。
例如,如果我执行make depcheck,则检测到编译错误。
我认为如果我设置一个单独编译所有头文件但不链接的cmake目标,则会报告预期的编译错误。
到目前为止,我找不到如何设置它。
有没有办法做到这一点?或者其他实现目标的方法?
我的头文件包含政策
每个头文件都应包含包含所需元素的头文件。换句话说,每个头文件都应该单独编译。
我想要达到的目标
我想知道通过工具辅助自动检测b.hpp缺失`#include "a.hpp"的方法。该工具意味着不是编辑器。我想cmake可以做到这一点。我正在寻找方法。
【问题讨论】:
-
“我在 emacs 上使用 fly-check。它很好地检查了这个问题。” - 你确定它可以吗?它如何处理间接包含问题(当
b.hpp包含包含a.hpp的c.hpp时)和私有包含问题(当不能直接包含a.hpp而必须包含c.hpp时)? -
@AlanBirtles,谢谢。我会检查的。
-
@VTT,我猜 fly-check 直接在后台编译当前打开的文件。它不是从 main.cpp 编译的。因此它可以检测到 b.hpp 中缺少 func_a()。
标签: c++ cmake dependencies include