【问题标题】:How can I include directories with project relative paths in CMake?如何在 CMake 中包含具有项目相对路径的目录?
【发布时间】:2015-04-11 20:35:43
【问题描述】:

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

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

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

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

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

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

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

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

有没有更好(或更规范/惯用)的方法来实现这一点?

【问题讨论】:

    标签: c++ visual-studio cmake


    【解决方案1】:

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

    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
    

    当然,这需要更改每个项目中的包含以反映这种新结构,包括正确定义标头的项目。

    这有一些优先级,因为 curlgoogletest 就是这样做的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2023-03-29
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多