假设我有一个我想用make安装的库:
// library = foo
$ ls foo/
lib include
$ ls foo/lib
foo.h
$ ls foo/include
foo-1.2.a foo-1.2.o foo-1.2.etc
// makefile
.PHONY: install-foo
foo=/path/to/unzipped/foo
current_dir=$(shell pwd)
install-foo:
- cd $(foo); ./configure --prefix=$(current_dir); make; make install
以上将始终安装
//makefile 2
.PHONY: install-foo reinstall-foo
foo=/path/to/foo
curdir=$(shell pwd)
install-foo: $(curdir)/foo/lib/foo.h $(curdir)/foo/include/foo-1.2.a etc.
$(curdir)/foo/lib/foo.h:
make reinstall-foo
$(curdir)/foo/include/foo-1.2.a:
make reinstall-foo
... (etc)
reinstall-foo:
cd $(foo); ./configure --prefix=$(curdir)/foo; make; make install
这个将为库中的每个文件安装一次,但(之后),当其中一个文件丢失时,它将重新安装。
最后,我有一个bash方法,只有它是如此,因为它使用bash而不是make:
// within install-foo:
-(not ((-f $(curdir)/foo/foo.h) and (-f $(curdir)/include/foo-1.2.a) and (etc.)) && really-install-foo
really-install-foo:
...etc.
问题是:什么是第一次安装的makefile设计,对make install-foo
的任何后续调用只会导致foo
一个,多个或全部安装库文件丢失了吗?