我想把自己介绍给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吗?这是我想要的行为。
答案 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文件的所有编译器。