C ++ makefile编译依赖库

时间:2013-01-02 17:16:28

标签: c++ compilation makefile static-libraries

这可能是一个noob问题,但我真的想弄明白:我的C ++项目使用了其他库(例如log4cplus和getopt_pp)。我在eclipse下开发它,现在我用autotools配置它,用makefile和configure脚本分发它,以确保每个人都可以编译它。 我的问题是:如何获得调用./configure./make将自动编译和安装最终用户系统中的静态库?

  • 这样做的最佳方式是什么?
  • 安装库的最佳途径是什么?

2 个答案:

答案 0 :(得分:1)

最好的方法是不要这样做。相反,您应该(在安装文档中)记录您的应用程序/库依赖于其他一些库(最好是您测试它的版本),并且您的configure脚本应检查是否存在这些依赖项。< / p>

原因是:

  • 应该找到这些库的系统之间存在巨大差异。您的脚本永远不会为每个人正确地执行此操作。
  • 用户可能已经安装了兼容版本,并且可能更喜欢使用与您的软件捆绑在一起的版本。
  • 如今,将这些库静态链接到应用程序中实际上非常罕见。所有主要编译器都默认为动态链接。这使得用户更有可能已经安装了这些库的版本。

答案 1 :(得分:0)

如果您将库与项目一起发货(而不是单独分发它们并要求用户确保它们已安装),那么您可能希望将这些库放在项目内的自己的目录中,并且在configure.ac中,通过将Makefile输出目标添加到AC_OUTPUT,确保它知道这些子目录,例如

AC_OUTPUT(Makefile log4cplus/Makefile getopt_pp/Makefile yourprogramsrc/Makefile)

然后在您的根级Makefile.am中,让它知道您的新子目录,即

SUBDIRS=log4cplus getopt_pp yourprogramsrc

然后确保您的包含标志和链接器标志设置为正确指向您所包含的库。