如何在cmake中包含标题

Sco*_*ttF 4 cmake

我正在尝试向 cmake 介绍自己。我在 Windows 上使用它来生成 MinGW Makefile。

我习惯于在同一目录下有一个 c++ 类头文件和源文件,以及按模块组织的目录。

我希望我的 cmake 配置让任何 cpp 依赖于其相应的 h 文件。此外,我希望 h 和 cpp 始终存在于同一目录中。

从我读到的内容来看,在 cmake 中,在我的 add_executable 行中,我列出了所有要编译的 cpp 文件。

如果我在 add_executable 行中列出了 src/module1/myclass.cpp ,如果 myclass.cpp 列出 #include ,cmake 将在哪里查找 myclass.h ?它会使 myclass.cpp 依赖于 myclass.h 吗?这是我想要的行为。

bam*_*s53 5

我希望我的 cmake 配置让任何 cpp 依赖于其相应的 h 文件。

CMake 会自动计算出你的 cpp 和 h 文件之间的依赖关系。它通过使用您的平台构建工具来做到这一点。例如,它知道如何告诉 gcc 生成依赖文件,然后它可以处理该文件。在 Visual Studio 等其他平台上,CMake 知道如何告诉 cl.exe 输出头文件依赖项,并且它也可以解析该输出。

您无需执行任何特殊操作即可让 CMake 正确处理您的标头依赖项。您所要做的就是确保在编译期间找到头文件。

如果我在 add_executable 行中列出了 src/module1/myclass.cpp ,如果 myclass.cpp 列出 #include ,cmake 将在哪里查找 myclass.h ?

编译器将查看其默认位置,您可以通过运行include_directories(...)命令(为整个 CMakeLists.txt 文件target_include_directories(your_executable_target ...)设置它们)或运行以仅为一个可执行文件设置它们来配置其他搜索路径。

如果您的头文件都与 cpp 文件一起存储,并且您提供了#include来自 cpp 文件位置的相对路径(并且您使用#include "..."代替#include <...>),那么您不需要配置头文件搜索路径:我知道搜索的所有编译器默认情况下相对于 cpp 文件。