2013-03-25 48 views
1

我正在使用Autoconf和Automake工具在ordrer中开发/分发我的应用程序。如果缺少系统库,请使用本地库

现在一切工作正常。

我的应用程序依赖于GSL(GNU科学图书馆),所以在我configure.ac,我寻找它这样做:

PKG_CHECK_MODULES([GSL],[GSL])

但如果GSL缺失,过程无法继续。

我的想法是这样的:包括GSL-1.15.tar.gz的分布状态存档,像这样:

  • /
    • 的3rdParty/
      • GSL-1.15.tar.gz
    • 的src/
      • ...
    • configure.ac

而且,假设最终用户没有互联网连接,或root权限,如果GSL丢失,他无法进行。

是否可以在configure.ac中编写如果缺少GSL,提取3rdParty/gsl-1.15.tar.gaz并指向提取的“include”和“lib”目录。

可能吗?

你能帮我吗?

+2

不要这样做:http://wiki.gentoo.org/wiki/Why_not_bundle_dependencies – 2013-03-25 23:31:09

+2

自动工具不是*包管理系统。不要尝试使用它们。 – 2013-03-27 13:04:18

+0

大量的大型应用程序,库/框架都这样做。 1)Linux发行版甚至无法就单个软件包管理系统达成一致 - 更不用说其他的Unix/BSD变种了。 2)用户不一定具有在系统范围内安装软件包/库的权限!有时候,能够完成任务是一个实际问题。链接的Gentoo文章甚至将这种方法描述为妥协。 – 2013-03-30 00:02:44

回答

0

由于大多数软件包都是压缩tarball,我没有看到gsl被指派为另一个压缩包 - 只需将源文件放在一个子目录中即可。然后可以使用AC_CONFIG_SUBDIRSconfigure.ac中配置GSL包。


PKG_CHECK_MODULES默认操作是中止,如果没有找到。要改变这样的:

PKG_CHECK_MODULES([GSL], [gsl >= 1.15], [gsl_pkg_local=;], 
        [gsl_pkg_local="yes"]) 

if test "x$gsl_pkg_local" != "xyes" ; then 
    AC_CONFIG_SUBDIRS([gsl-1.15]) 
fi 

这里假设你有在顶层的gsl-1.15目录。 gsl_pkg_local变量名也没什么特别的 - 所以你可以改变这些东西来满足你的需求。

+0

只有在系统中缺少GSL时才可以配置它吗? – odysseasg 2013-03-26 13:45:26

+0

@odysseasg - 当然。我认为它目前正在中止,如果没有找到? – 2013-03-26 17:03:12

+0

不错的尝试,但有条件地配置子目录意味着你必须非常小心SUBDIRS,DIST_SUBDIRS,等等,以确保你不会打破'make dist':http://stackoverflow.com/questions/15136267/how- to-get-shell-script-output-into-makefile -a -a-make-time/15216931#15216931。说真的,这就是疯狂。 – 2013-03-29 22:31:04