c++ - 如何在 CMake 中包含具有项目相对路径的目录?

标签 c++ visual-studio cmake

我正在与使用 CMake 的团队一起开发产品。我们的 CMake 项目中有几个 Visual Studio 项目(库和可执行文件),它们引用其他项目 header (通过 target_include_directories() )。在源文件中,这些 header 包含如下所示:

#include "some_header.h"    // from project_x
#include "another_header.h" // from project_y

我希望能够将这些 header 包含在引用它们从中提取的项目的路径中,例如:

#include "project_x/some_header.h"
#include "project_y/another_header.h"

最可接受的方法是什么?我想到了几个解决方案:

  1. 添加包含项目的目录作为包含路径。这会产生包含所有内容 的不良副作用,而且似乎是一个糟糕的解决方案。

  2. 包含一个名为“include”的项目子文件夹,其中包含一个与项目同名的文件夹,这会创建一个稍微冗余的路径:/<project_name>/include/<project_name>/<...>

还有第三种解决方案,为每个项目使用带有子文件夹的共享包含目录,但它不适用于我们的项目,因为我们在文件系统和 Visual Studio 解决方案中按类别对构建项目进行分组,这会导致/include/ 中的文件夹结构与源代码树的其余部分不同,这是不受欢迎的。

是否有更好的(或更规范/惯用的)方法来完成此任务?

最佳答案

如果您有这样的项目结构:

project_x/some_header.h
project_y/another_header.h

并且您希望所有您的 CMakeLists 保持相同,那么我会在每个项目中引入另一个文件夹:

project_x/project_x/some_header.h
project_y/project_y/another_header.h

当然,这需要更改每个项目中的包含以反射(reflect)这种新结构,包括正确定义 header 的项目。

这有一些优先级,因为这就是 curl 的方式和 googletest做吧。

编辑:我知道这与您概述的第二种方法非常相似。如果您的目录结构已经使用了 include 目录,那么我的建议与您的第二个完全相同。至少,这应该证实您的直觉,即这不是一件完全荒谬的事情,即使它会产生一些冗余。

关于c++ - 如何在 CMake 中包含具有项目相对路径的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29582774/

相关文章:

c++ - 关于变量在内存中位置的问题

c++ - 接受带有 X 参数的可调用仿函数的模板函数

c++ - C++录音

c# - VisualStudio 解决方案中的条件项目路径变量

build-process - cmake命令语法问题

c++ - 访问 C++ 容器中元素的最有效方法是什么?

c++ - 创建发布版本时,我收到以下警告(与 2008 设置相比)

c# - 剪刀石头布的胜率百分比不起作用?

unix - cmake命令行的含义是什么

c++ - CMake 无法找到 mysqlclient 库