【问题标题】:How to include headers in cmake如何在cmake中包含标题
【发布时间】:2015-11-07 19:34:05
【问题描述】:

我正在尝试向 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 吗?这是我想要的行为。

【问题讨论】:

  • 如果你#include头文件,它将是依赖的;你不需要在你的 CMakeLists 中做任何特别的事情。根据需要将头文件与 cpp 放在同一目录中将确保找到它,因此您无需弄乱头文件搜索路径。

标签: cmake


【解决方案1】:

我希望我的 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 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2021-05-21
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多