【问题标题】:Cleanest way for automated dependency management in c++ [closed]c++中自动依赖管理的最简洁方法[关闭]
【发布时间】:2014-10-23 03:38:02
【问题描述】:

相关问题:C++ Build Systems - What to use?

我正在努力为我的 c++ 项目寻找一个好的构建/依赖管理工具,它具有以下所需的功能:

  • 能够按名称、版本指定依赖项
  • 在我的应用程序编译期间会自动包含依赖项的“包含”目录
  • 依赖项会自动下载、构建并链接到我的应用程序
  • 传递依赖也有以上两种行为
  • 能够指定测试范围依赖项
  • 测试是自动构建和运行的,可能会使用内存泄漏检查工具(例如 valgrind)
  • 可能运行覆盖工具,例如冠状病毒
  • 支持跨平台

我使用过 Maven,使用 [nar-maven-plugin],有时使用 [cmake-maven plugin]。然而,这意味着我必须制作一个[pom.xml per dependency]。这种方法不是特别好,因为有时必须精心制作[nasty pom.xml] 才能使事情正常工作。此外,它不支持运行 valgrind(还没有内置支持)。

我曾尝试使用 CMake,因为我看到很多项目都在使用它,但我发现很多时间都花在“编写构建/依赖管理系统”而不是“使用它”上。是的,我确实可以编写很多函数:

function(RequireSomeLib artifact)
  # ExternalProject_Add(SomeLib ... etc.)
  # find SomeLib package
  # add include dirs(artifact SomeLib_INCLUDE_DIRS)
  # if SomeLib is not just a header library, also link its built library to the artifact
  # for each of SomeLib's dependencies, do this same "call" (transitive dependencies' libraries must also be linked when building an executable)
endfunction()

对于每个依赖项。乏味,但目前是我看到的最干净的前进方式。

我的项目所依赖的库都使用了CMake的前提下,有没有更好的方法来解决这个问题?

我还没有看到或尝试过 SCons、AutoTools 或 QMake。

在 Java 中,“检索依赖项、构建、测试和发布”问题要简单得多。_.

【问题讨论】:

    标签: c++ dependency-management build-system


    【解决方案1】:

    所有 C++ 构建系统都需要您在依赖项和包检测中编写代码。它们中的每一个都是出于对以前技术的挫败感而创建的,其目的是消除对样板代码的需求,并创建一个完整的、跨平台的、自动化的、易于使用的解决方案,但归根结底,除了要构建的包的代码之外,您最终还将编写代码。

    如果您仔细观察,您会发现每个构建系统的拥护者之间都存在争论。几年前我发现了一个。他们的论点太弱了,我最终放弃了搜索。

    我是 CMake 的用户,原因很简单:几年前我找到了第一个允许我生成不同构建目录的 CMake。我确信所有现代构建系统都已经实现了这个想法,但我坚持使用 CMake 只是因为我已经习惯了它。老实说,我发现与基本 Makefile 相比,几乎没有什么明显的优势。我必须为我的 CMakeFiles.txt 编写样板代码,即使它是一个没有依赖项的 C++ 项目。

    一段时间后,我决定尝试一些不同的 IDE;我很幸运 Qt Creator 在 CMake 项目上运行;我留在 CMake 上还有另一个原因。

    我给你的建议是访问每个构建系统的网页;查看它们当前实现的功能(不是 TODO)、与其他系统的比较、IDE 支持以及您必须为它们编写的代码的复杂性。我很确定您不会找到满足所有要求的构建系统,因此您必须对它们进行彻底测试,看看哪个最适合您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2012-03-13
      • 2012-03-23
      • 1970-01-01
      相关资源
      最近更新 更多