将 Maven 用于 C/C++ 项目

Posted

技术标签:

【中文标题】将 Maven 用于 C/C++ 项目【英文标题】:Using Maven for C/C++ projects 【发布时间】:2010-12-05 05:37:20 【问题描述】:

我将 Maven 构建在业余、编写不佳且坦率地说 - 原始 C/C++ 代码(意味着一些 C,一些 C++)的集群周围。问题是 - 目前有很多它在流通,不能轻易更换。构建它需要大量的部落知识(您必须从一个立方体转到另一个立方体才能了解如何编译/构建各个部分)并且发布完全是一场噩梦。 (不 - 我不会重写它,请不要问) 我的问题是 - 我应该使用 maven-native-plugin 替换大量的短 makefile 还是使用 exec-maven-plugin 来简单地执行这些? 到目前为止,我有pretty good experience,后者在做.NET,不知道我应该投资native 插件还是继续使用exec?如果您有“Mavenizing”C/C++ 方面的经验,我很想得到一些建议。

【问题讨论】:

我正要试一试。正如我所看到的,它仍然被维护并且它已经移动到这里:github.com/sonatype/maven-nar-plugin 【参考方案1】:

我强烈推荐maven-nar-plugin。我发现它在许多方面都优于替代品。它不需要列出源文件,处理多个操作系统和架构,处理单元和集成测试,并且通常遵循“maven 方式”。它引入了一种新的打包方式 - NAR 或“本机存档”,其中包含您关心的工件(.dll、.so、.a、.exe 等),还包含元数据、标头等。这是有道理的。

将第三方软件打包到 NAR 中确实需要一些前期工作,但它非常简单。一旦它们是 NAR,您只需使用正常的 Maven 依赖机制来链接它们,例如:

<dependency>
  <groupId>cppunit</groupId>
  <artifactId>cppunit</artifactId>
  <scope>test</scope>
</dependency>

一个缺点是它似乎没有得到积极维护,但它功能齐全,是一个令人印象深刻的 Maven 插件创作示例。

【讨论】:

感谢您的提示 - 我一定会查看的! 我将接受这个作为答案 - 这确实似乎优于 maven-native-plugin 祝你好运。需要注意的一点 - 今天早上我收到了一条通知(多么巧合),我一年前提交的一个错误今天已解决 - 维护似乎已经做出反应。 看起来 maven-nar-plugin 现在正在由 sonatype 维护:issues.sonatype.org/browse/NAR 使用 nar-maven-plugin 的示例时,请执行以下操作:mvn package -- 这将生成测试包,然后可以运行依赖于 NarSystem 的测试跨度> 【参考方案2】:

在 Maven (Java) 上有一个等价物。 我的建议是使用 CMake + CPM 进行构建和 PKG 管理,这是 C++ 世界中使用的大多数常用工具。 作为替代,C++ 也存在 Gradle。

有用的链接:https://medium.com/swlh/cpm-an-awesome-dependency-manager-for-c-with-cmake-3c53f4376766

【讨论】:

结合 Cmake,您也可以使用 VCPKG 而不是 CPM,此链接可以帮助比较 PKG Manager for C++ jonathan.temno.eu/blog/vcpkg.html 为什么 MS 认为它必须将竞争对手推向柯南,以及为什么 Melchior 先生认为他应该发明另一种工具,与 CMake 等特定构建系统甚至一个特定的构建系统相关联Git repo 服务器(仅限 github)?按照这个速度,我也可以建议使用 build2 的包管理器,如果每个人都继续这个根,我们将拥有与构建系统、库和语言一样多的包管理器,从而无法开发和分发任何软件。

以上是关于将 Maven 用于 C/C++ 项目的主要内容,如果未能解决你的问题,请参考以下文章

maven课程 项目管理利器-maven 3-9 maven依赖优先原则 4星

如何使一个 Maven 模块依赖于另一个?

将 Gradle 模块包含到 Maven 项目中

用于嵌入式项目的 C/C++ HTTP 客户端库 [关闭]

将项目从 C++ 转换为 C#

Maven入门教程