什么是"打包"的最佳方式。一个应用程序?

时间:2015-07-17 05:11:25

标签: c build makefile

每次我将c应用程序无人看管一段时间,升级我的发行版或更改一些软件包时,构建会立即中断。

我需要的是一个构建系统,它将特定版本的特定库下载为.zip,并在构建过程中将其安装在计算机上。更好的是将本地安装到/ lib文件夹中。 但是我也有一些依赖项,比如库可能需要libjpeg-dev来获取完整的功能集。

我知道的构建系统(make,tup,cmake)不处理依赖性。我想像maven for c这样的东西存在吗?

2 个答案:

答案 0 :(得分:2)

您可以使用Makefile和相关preprocessor标记将-M自动生成依赖关系gcc;所以如果外部包含的文件发生了变化,你的构建就会完成。

您可能会对autoconf感兴趣。它会检测一些依赖关系但不会拉它们。 pkg-config也可以提供帮助。

关于提取依赖关系,这是特定于操作系统的并且与package manager相关。所以在Debian或Ubuntu(使用aptitude.deb包)和Fedora(使用yum.rpm包)上有所不同

看起来你想要一个通用的包管理器,而且没有。 每个Linux发行版都有自己的包管理(我听说Window或MacOSX有几个或没有,取决于你如何计算它们。)

BTW,软件包的管理是系统管理员的业务。他当然不希望这是完全自动的(因为包管理器可以检测特定于他的计算机的一些冲突)。

最后,您通常不应该想要一个特定的版本的库;你只关心API。您通常至少需要某个给定版本(或更高版本),因为它定义了您关注的API:如果您的程序使用GTK 3.14,它很可能是可构建的并且使用GTK 3.16运行(因为它们的API兼容)

你可以切换到更现代的语言,更好地支持modules(C甚至C ++都不知道它们;它们可能出现在C ++的未来版本中,可能是C ++ 17)。例如,Ocaml具有真正的第一类模块和仿函数,并且还具有Opam(特定于Ocaml)的包管理器。

答案 1 :(得分:1)

似乎bazel可以做到这两点:成为构建系统和依赖管理器

http://bazel.io/docs/external.html