Makefile 使安装导致重新编译

Makefile 使安装导致重新编译,makefile,autoconf,recompile,Makefile,Autoconf,Recompile,我正在编写一个主makefile来编译和安装多个相互依赖的基于autoconf的库。一切都很好,第一次去。问题是:如果我单独处理其中一个库并执行“make&&make install”,前缀文件夹中的头文件将被覆盖(即使它们未被触及)。这会导致所有依赖库从头开始编译 有没有一种方法可以避免不必要的重新编译而不侵入makefile 您可以使用仅存在的sentinel文件来建立依赖关系图。例如 prefix := /usr/local .PHONY: all all: libx-built li

我正在编写一个主makefile来编译和安装多个相互依赖的基于autoconf的库。一切都很好,第一次去。问题是:如果我单独处理其中一个库并执行“make&&make install”,前缀文件夹中的头文件将被覆盖(即使它们未被触及)。这会导致所有依赖库从头开始编译


有没有一种方法可以避免不必要的重新编译而不侵入makefile

您可以使用仅存在的sentinel文件来建立依赖关系图。例如

prefix := /usr/local

.PHONY: all
all: libx-built

libx-built \
  : libx.tar.gz \
  ; tar xzvf $@ \
  && cd libx \
  && ./configure --prefix=$(prefix) \
  && make && make install \
  && touch $@
然后,仅当libx build是新的时,才创建一个依赖liby build

liby-built \
  : liby.tar.gz libx-built \
  ; ...

您可以使用仅存在的sentinel文件来建立依赖关系图。例如

prefix := /usr/local

.PHONY: all
all: libx-built

libx-built \
  : libx.tar.gz \
  ; tar xzvf $@ \
  && cd libx \
  && ./configure --prefix=$(prefix) \
  && make && make install \
  && touch $@
然后,仅当libx build是新的时,才创建一个依赖liby build

liby-built \
  : liby.tar.gz libx-built \
  ; ...

也许解决问题有点晚,但是

./configure INSTALL="install -p"

修复了重新编译问题。此标志使GNU install将已安装文件的时间戳设置为生成文件的时间戳。

解决方案可能有点晚,但是

./configure INSTALL="install -p"

修复了重新编译问题。此标志使GNU install将已安装文件的时间戳设置为构建文件的时间戳。

我认为这并不是真正涵盖所有情况。如果用户从svn更新他/她的源代码并进行make-由于未触及sentinel文件-将不会生成任何内容。我错了吗?目标是构建和安装所有更改;但是为了避免不必要的构建,这是正确的。但是因为我们讨论的是基于autoconf的库,所以我认为它们是一堆需要安装的第三方软件包,所以它们只有在您决定升级时才会更改。如果是这样的话,那么你可以用这样的技巧破解DAG。如果没有,那么也许给我一个你正在做的具体例子,我会修改我的建议。我认为这并没有涵盖所有的情况。如果用户从svn更新他/她的源代码并进行make-由于未触及sentinel文件-将不会生成任何内容。我错了吗?目标是构建和安装所有更改;但是为了避免不必要的构建,这是正确的。但是因为我们讨论的是基于autoconf的库,所以我认为它们是一堆需要安装的第三方软件包,所以它们只有在您决定升级时才会更改。如果是这样的话,那么你可以用这样的技巧破解DAG。如果没有,那么也许给我一个你正在做的具体例子,我会修改我的建议。