【问题标题】:C++ Build ProcessC++ 构建过程
【发布时间】:2012-07-18 06:30:31
【问题描述】:

我目前正在开发一个开源 C++ 项目。我在 C++ 方面没有太多经验,因为我的日常工作主要涉及 Java。我现在正计划发布我的 C++ 项目,我想知道我应该如何安排我的项目的打包。例如,在 Java 中,所有的类文件都打包成 jar 文件。那么 C++ 中的等效方法是什么?组织源代码/二进制文件有什么好的做法吗?顺便说一下,我的目标平台是 Linux。

另一个问题是我目前正在使用 Eclipse CDT 插件进行开发和构建。那么无论如何我可以从 Eclipse 项目中提取构建脚本并将其用作通用构建脚本吗?关于 C++ 构建/打包有什么好的参考吗?提前致谢。


编辑

为了澄清一点,我认为我的项目的发布可以被视为一个应用程序。它是一个用于软件配置管理的命令行工具。

【问题讨论】:

  • 要回答这个问题,我们需要更多地了解您的项目。例如,它是(动态或共享)库还是应用程序/应用程序?还是您只是想让您的代码可供他人为自己构建?
  • @Turix 谢谢。我添加了更多细节。如果问题对您来说仍然模棱两可,请告诉我。
  • 不是重复的,但可能有用:stackoverflow.com/questions/54674/…
  • 还可以查看这些“如何将 C++ 代码部署到任何地方的提示”stackoverflow.com/questions/2486060/…

标签: c++ build-process


【解决方案1】:

我目前正在开发一个开源 C++ 项目。

这简化了很多事情。您应该为您的项目提供构建脚本并支持它们用于不同的用例(了解 Makefile,有类似的概念,如“目标”)。

我在 C++ 方面没有太多经验,因为我的日常工作主要涉及 Java。

您过去在 Java 中拥有(并且现在要求)的大多数东西都是发明的,因为它们缺乏 C/C++。至少了解动态(共享)/静态库(简单来说就是 .so 和 .a 文件)。

我现在正计划发布我的 C++ 项目,我想知道我应该如何安排我的项目的打包。

“C++ 项目的打包”是非正式的。您可以为知名 IDE 提供源代码、构建脚本和一些项目文件。

编辑:您已指定您正在构建命令行应用程序。我相信您所需要的只是从该应用程序的简单 Makfile 开始。参考 Makefile 可以由 Eclipse 自动生成。如果您打算将应用程序部署为独立软件,那么您必须了解打包(rpm、deb、tgz)。

例如,在Java中,所有的类文件都打包成jar文件。

没有跨编译器兼容 C++“包”之类的东西(即使“模块”在最新的 C++11 标准中也被拒绝) 因为没有二进制标准来编码 C++ 类 (ABI)。在 linux 上,您很可能会使用 GCC(或 Intel 的编译器,或 LLVM 的 CLang,或 OpenWatcom 的自定义构建或......), 但是您链接到的标准库版本使二进制版本的发布几乎无用。 这就是重新分发源代码的原因。

那么 C++ 中的等价方法是什么?

这里没有明确的答案。

组织源代码/二进制文件有什么好的做法吗?

看看大型项目,看看他们组织构建的方式。 “构建工程师”这个职业强调了大型项目编译/链接的困难。

顺便说一下,我的目标平台是 Linux。

这也是一个不完整的描述。 “Linux”是一个模糊的术语。您应该谈论 Linux 发行版、编译器工具链和包管理器。例如,Ubuntu 12、amd64、GCC 4.6 工具链、APT 包管理器。

围绕同一个内核源代码构建了不同的“linux”。有不同的编译器。至少需要考虑三个主要的包管理器:Debian/Ubuntu(deb,apt)、Red Hat(rpm)、Slackware(tgz)。

另一个问题是我目前正在使用 Eclipse CDT 插件进行开发和构建。那么无论如何我可以从 Eclipse 项目中提取构建脚本

有一种“元技术”:您编写项目的“描述”,然后一个工具生成项目文件并为您的源代码构建脚本。看看CMake。由于您使用的是“linux”,因此请尝试查看一些标准的 autotools (autoconf) 方式。

关于 C++ 构建/打包有什么好的参考吗?

您应该从构建应用程序开始,然后再处理部署问题。 C/C++ 是一个难以学习的传统,有很多在 Java 中被避免的微妙之处。

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 2011-03-21
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2015-01-20
    • 2015-06-22
    相关资源
    最近更新 更多