2010-07-12 45 views
1

我正在编写一个主makefile来编译和安装多个基于autoconf的库,它们相互依赖。一切工作都很好。问题是:如果我单独使用这些库中的一个,并且“使& &安装”前缀文件夹中的头文件被覆盖(即使它们未被触摸)。这会导致所有依赖库从头开始编译。使安装导致重新编译

有没有办法避免不必要的重新编译,而没有入侵makefile?

回答

1

也许解决方案是晚了一点,但

./configure INSTALL="install -p" 

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

0

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

prefix := /usr/local 

.PHONY: all 
all: libx-built 

libx-built \ 
    : libx.tar.gz \ 
    ; tar xzvf [email protected] \ 
    && cd libx \ 
    && ./configure --prefix=$(prefix) \ 
    && make && make install \ 
    && touch [email protected] 

然后,只有在libx-built是新的时候,才会进行相关的liby构建。

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

我认为这并不能涵盖所有的情况。如果用户从svn更新他/她的源并做了一个make -since sentinel文件没有被触及,那么将不会构建任何东西。我错了吗? 目标是建立和安装所有的变化;但要避免不必要的构建。 – 2010-07-13 02:22:25

+0

这是正确的。但是由于我们谈论的是基于autoconf的库,我认为它们是需要安装的一堆第三方软件包,因此只有在决定升级时才会更改。如果是这样的话,那么你可以使用这样的技巧来破解DAG。如果没有,那么也许给我一个你正在做什么的具体例子,我会修改我的建议。 – 2010-07-14 00:51:27

相关问题