如何在使用 CMake 构建时列出 .hpp 头文件

Posted

技术标签:

【中文标题】如何在使用 CMake 构建时列出 .hpp 头文件【英文标题】:How to list .hpp header files as they are being built with CMake 【发布时间】:2019-01-24 18:21:34 【问题描述】:

我有许多没有实现文件并且是自包含的 C++ 头文件。这些文件中的每一个都以.hpp 结尾,符合我的一个约定。

当我现在编译我的项目时,它只列出(通过stdout)正在构建的.cpp,而不是任何.hpp 文件。那么如何在构建时列出.hpp 文件呢?如果有帮助,我正在使用 CMake 3.13。

【问题讨论】:

【参考方案1】:

Linux 答案:

记住 Cmake 不会编译,尽管您可以执行 cmake --build . ,这就像在您运行 cmake ../.. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG 的文件夹中调用 make 一样。所以 Cmake 只是一个构建生成器,而不是一个真正的构建器。 make 命令也不会构建,它只是读取一些脚本/文本文件(为简单起见,我们称它们为),其中包含调用所需编译器(GCC、CLANG 等)的规则。因此,编译器在预编译阶段显示头文件。这是由编译器处理的。因此,如果您想查看包含的所有标头,则需要告诉编译器将它们显示给您 尝试将 -M 添加为 compiler flag(我假设您正在使用 GCC 进行编译)

不是输出预处理的结果,而是输出一条规则 适合 make 描述主源文件的依赖关系。 预处理器输出一个包含目标文件名的 make 规则 对于该源文件,冒号和所有包含的名称 文件,包括来自 -include 或 -imacros 命令行的文件 选项。

较小的输出标志将是 -H

-H 打印使用的每个头文件的名称,以及其他正常活动。每个名称都缩进显示 '#include' 堆栈。还打印了预编译的头文件, 即使被发现无效;无效的预编译头文件 文件以“...x”打印,有效文件以“...!”打印。

【讨论】:

感谢@eucristian 的回答!如果没有人尽快给出答案,我会接受,抱歉让您久等了。 我试过了,但是它输出ALL链接的头文件,有没有只做本地头文件?我想不会。 试试 -MM 或者查看我给你的链接。 -MM 我认为不输出系统头文件 好的,所以我尝试使用 add_compile_optionstarget_compile_definitions 函数将它添加到 CMake(我使用的是测试文件和 g++/clang),但输出似乎被抑制了,我猜是 CMake 生成的 make 文件。有什么想法吗?另外,对不起,我应该查看链接。 使用 make VERBOSE=1 代替 cmake --build

以上是关于如何在使用 CMake 构建时列出 .hpp 头文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 cmake 正确链接库?

我将如何使用 CMake 包含 asio 库?

cmake - 如何链接Boost的sub_directory头文件(例如:/archive/text_oarchive.hpp)?

cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?

编译 private.hpp OpenCV 3.0.0-rc1 时出错

在使用 cmake 构建时,如何让 make 变得冗长但只有“有意义”的行?