如何在cmake中包含标头

时间:2015-11-07 19:34:05

标签: cmake

我想把自己介绍给cmake。我在Windows上使用它来制作MinGW Makefiles。

我习惯在同一目录中有一个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吗?这是我想要的行为。

1 个答案:

答案 0 :(得分:3)

  

我希望我的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文件旁边,并且您从cpp文件位置提供了#include个相对路径(并使用#include "..."代替#include <...>)那么您就不会不需要配置标头搜索路径:默认情况下我知道搜索相对于cpp文件的所有编译器。