【问题标题】:How to write a makefile that builds only the libraries?如何编写只构建库的makefile?
【发布时间】:2011-01-21 01:28:56
【问题描述】:

我有一组用于我的应用程序开发的库。每当我构建应用程序时,都会重新构建所有库。我和我的团队觉得一次又一次地构建库真的没有必要。

我将如何制作一个独立构建所有库和应用程序的 makefile? 我的意思是说,当我构建我的应用程序时,我想避免构建所有已经构建的库。

提出一些意见。

编辑: 描述: 我的应用程序名为 xyz,所有源文件都存在于 ./src/xyz 目录中。 它依赖于 ssh 和 net-snmp 等库。 net-snmp 和 ssh 都放在 ./lib 目录下。

现在,每当构建应用程序时,都会重新构建所有库。这里我不修改我的应用所需的库包。

构建需要将近一个小时的时间。在每个构建库都重新构建,这不是必需的。

现在,我的问题? 如何编写将分别构建库和应用程序的 makefile。

【问题讨论】:

  • 你是如何定义你的依赖的?只有当它们的源发生变化时,这些库才应该重建。
  • 解决方案是使可执行文件依赖于构建的库而不是它们的源代码。请发布您的 makefile 的一部分以了解它现在在做什么。
  • @: 编辑了我的问题并解释了场景。

标签: linux makefile


【解决方案1】:

你没有给我们足够的信息来给出详细的答案,但这里是大纲:

LIBRARIES = ./lib/ssh ./lib/net-snmp

SOURCES = foo bar baz

xyz: $(LIBRARIES) $(SOURCES)
    command-that-rebuilds-app-from-sources-and-libraries

./lib/ssh: things-that-ssh-needs
    command-that-rebuilds-ssh

./lib/net-snmp: things-that-net-snmp-needs
    command-that-rebuilds-net-snmp

XPATH: ./src

【讨论】:

  • 好吧,我不知道。但是有没有办法知道图书馆是否已经建成?这样我就不需要每次都构建库,我可以跳过几个步骤。
  • Make 会为您解决这个问题。如果things-that-ssh-needs 都没有改变,那么lib/ssh 将不会被重建。你会一直运行make xyz
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多