【发布时间】: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