如何在使用 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_options
和 target_compile_definitions
函数将它添加到 CMake(我使用的是测试文件和 g++/clang),但输出似乎被抑制了,我猜是 CMake 生成的 make 文件。有什么想法吗?另外,对不起,我应该查看链接。
使用 make VERBOSE=1 代替 cmake --build以上是关于如何在使用 CMake 构建时列出 .hpp 头文件的主要内容,如果未能解决你的问题,请参考以下文章
cmake - 如何链接Boost的sub_directory头文件(例如:/archive/text_oarchive.hpp)?
cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?