C++构建过程

C++ Build Process

本文关键字:过程 构建 C++      更新时间:2023-10-16

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

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


已编辑

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

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

这简化了许多事情。您应该为您的项目提供构建脚本,并为不同的用例提供支持(了解Makefiles,有类似的概念,如"target")。

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

你过去在Java中拥有(现在也要求)的大多数东西都是因为C/C++中缺少而发明的。至少了解一些动态(共享)/静态库(.so和.a文件要简单一些)。

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

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

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

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

不存在与C++"包"兼容的跨编译器(甚至在最新的C++11标准中也拒绝了"模块")因为没有二进制标准来编码C++类(ABI)。在linux上,你很可能会使用GCC(或英特尔的编译器,或LLVM的CLang,或OpenWatcom的自定义构建…),但是,您链接到的标准库版本使得二进制构建的发布几乎毫无用处。这就是重新部署源代码的原因。

那么,C++中的等效方法是什么呢?

这里没有明确的答案。

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

看看大型项目,看看他们组织构建的方式。"建筑工程师"一词作为一种职业,强调了大型项目编译/链接的困难。

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

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

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

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

有一种"元技术":你写一个项目的"描述",然后一个工具生成项目文件并为你的源代码构建脚本。看看CMake。既然您使用的是"linux",请尝试一下autotools(autoconf)的标准方式。

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

您应该先构建应用程序,然后再讨论部署问题。C/C++是一个很难学习的遗留问题,它有很多在Java中避免的微妙之处。