Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 开源项目通常是如何组织和部署的?_C++_Deployment_Version Control_Build_Open Source - Fatal编程技术网

C++ 开源项目通常是如何组织和部署的?

C++ 开源项目通常是如何组织和部署的?,c++,deployment,version-control,build,open-source,C++,Deployment,Version Control,Build,Open Source,我正在寻找关于如何发布第一个开源项目的源代码的技术部分的文档,特别是关于C/C++、Java和Python中的库密集型内容的文档 < P>,举个例子,如果我用一个IDE,比如NETBeas和像XeSer-C和Boost之类的各种库来构建一个C++项目,我想知道以下问题: 在我自己的环境之外,最常用的工具是什么来组织这样一个过程的构建过程,更重要的是 我如何以“通常正在做”的方式学习它们?我使用了许多开源项目,当然可以阅读构建代码(makefile和config选项等等),但这并没有告诉我如何做

我正在寻找关于如何发布第一个开源项目的源代码的技术部分的文档,特别是关于C/C++、Java和Python中的库密集型内容的文档

< P>,举个例子,如果我用一个IDE,比如NETBeas和像XeSer-C和Boost之类的各种库来构建一个C++项目,我想知道以下问题:

  • 在我自己的环境之外,最常用的工具是什么来组织这样一个过程的构建过程,更重要的是

  • 我如何以“通常正在做”的方式学习它们?我使用了许多开源项目,当然可以阅读构建代码(makefile和config选项等等),但这并没有告诉我如何做到这一点,重要的细节是什么,以及人们通常期望的是什么

  • 是否有针对特定语言(如上述语言)的“编码风格”部署指南?是否有开源项目对此有指导方针

  • 在部署源代码时(而不是使用apt/port/etc来解决依赖关系的包),部署库依赖关系的典型方式是什么

我知道我可以阅读所有手册页和所有文档,但我想阅读“约定”以及它们是如何实施和预期的,而不是所有可能的技术选项

我在另一个stackoverflow帖子上找到了这个,很好,但不是很具体:
你可以从和开始。LLVM项目是一个组织良好的开源项目。

当您似乎正在编写Linux应用程序时,您可能想看看GNU自动工具,例如。实际上,它们有很多功能,它们将为您处理大多数依赖性问题。

让我们看看其中一个开源功能。如果您想了解它是如何部署的,请下载两个类似的开源项目并从中学习。所以,找一个和你一样的,研究它的来源

为什么会有帮助?问题是,开源项目必须能够轻松地在用户的机器上构建。否则,没有人能够为他们做出贡献。因此,有关如何部署它们的所有必要信息通常都包含在
INSTALL
README
文件中,其中包含您下载的源代码。它们通常由几个简单的步骤组成。出于同样的目的,先决条件的可用性和版本检查是自动化的(在
configure
脚本中),有时这样的脚本甚至有助于安装它们

人们通常期望的是

# Download sources (this line is read from your website)
wget http://myapp.org/myapp-source-2.15.tgz
tar -xzf myapp-source-2.15.tgz
cd myapp-2.15
less INSTALL
# read INSTALL file, where instructions about installing prerequisites are
./configure --help
# Read help, learn about possible options
./configure --prefix=/install/here --without-sound
make
make install
现在一些应用程序使用而不是(带有
configure
script的stuff)

我怀疑Linux项目是否真的需要NetBeans作为一个构建系统——这太过分了。但是这个IDE似乎生成了makefiles,所以请发布它们。为了方便起见,您也可以将特定于IDE的项目文件提交到存储库中,但这不应该是构建软件的主要方式

用户希望在您的软件包中找到更多内容:

  • 许可信息(通常在
    许可证
    文件中以及每个源文件的开头)
  • 链接到项目主页(报告错误的位置)
  • 编码指南(作为文本文件)
  • 维护人员信息(如何升级版本、如何添加模块等)
    • 我建议:


      这本书解释了大多数常用的程序,以及许多社会问题,例如如何处理贡献者。

      您想要的是构建系统++

      如果您是为POSIX(linux)平台开发的,或者您只在Win32下使用MingW,那么我建议您学习如何使用AutoTool——autoconf/automake/libtool和friends

      它为您提供源代码打包、配置、测试和安装。它们非常适合分销包装商(deb/rpm)

      它们的学习曲线非常陡峭,但对于这些任务来说,它们是非常强大的工具

      但是,如果您想支持MSVC编译器,我建议您看看CMake,因为它功能不太强大,需要更多的编写,但是对于存在所有dllexport/import问题的Windows,您需要使用它(或者,用不太客气的话来说,它是垃圾)


      这就是您要找的。

      谢谢,但这更多的是关于编码标准,而不是源代码部署/构建标准,我要找的是关于如何摆脱“。。嗯,它在我的机器上运行…。我不确定这是否有帮助,但这是我为我的项目准备的:。说明有点复杂,因为我使用了各种来源的东西。你对Netbeans的看法是对的,我实际上说的是,我希望它独立于我自己的私有环境。也许你是对的,简单地阅读大量的资料和文档会有所帮助,但我希望有一种标准的方法来做这件事,并描述它是如何做的。configure/make/makeinstall过程当然就是这样,我想知道是否有人写过一本书或一个网站,介绍了向公众打包和发布源代码的整个过程(因为“普通”书籍都是关于产品的)。为了从NetBeans转换为通用makefiles,您可能希望编写一个特殊的“维护者”脚本(也可能发布它)。关于组织代码,除了编写关于使用特定工具(如autotools或cmake)的内容外,没有什么可写的。只需检查任何源代码中应该包含的内容(我将编辑我的答案以获取一些想法)。