C++构建过程

K H*_*ein 4 c++ build-process

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

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


编辑

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

Vik*_*pov 5

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

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

我没有太多的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包管理器.

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

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

有一种"元技术":您编写项目的"描述",然后工具生成项目文件并为您的源构建脚本.看看CMake.因为你在"linux"上,试着看一下autotools(autoconf)的标准方法.

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

您应该首先构建应用程序,然后继续部署问题.C/C++是一个难以学习的遗产,在Java中可以避免许多细微之处.