分类: C/C++
2007-05-14 18:37:12
通过定制Makefile.am里面的内容可以实现将不同的程序文件、库文件、数据文件等安装到布通目录里去。automake默认给Makefile.am定义了一些目录,来把一些文件安装到指定的目录下,这些默认的目录变量如下:
bindir
libdir
includedir
datarootdir
.....
等等
我们在编写Makefile.am文件的时候,使用 bin_PROGRAMS=来把指定的程序安装到bin目录下,也就是bindir下。
使用lib_LIBRARIES来把指定的静态库安装到lib目录下,也就是libdir下。
那么我们想把可执行程序或者库安装在自定义的目录下的时候,由于不是系统默认的,所以必须提供对应的dir变量才可以。例如我们要把一些可执行程序安装的test目录下,那么除了要用test_PROGRAMS来指定这些程序,还要定义testdir变量。一般可以这样定义:
testdir=$(prefix)/test,这样在运行make install的时候,test_PROGRAMS所包含的文件将被安装到安装目下的test子目录里。对于库,使用test_LIBRARIES,并且定义testdir。(如果同时存在test_PROGRAMS和test_LIBRARIES,那么我估计这些程序和库文件都会被安装到testdir下。我没有测试过,有人测试过可以告诉我一下 ).
对于我们不需要安装的程序或者库,使用noinst_前缀即可,例如我们只要编译不要安装的程序使用noinst_PROGRAMS来指明,对于只要编译不要安装的静态库使用 noinst_LIBRARIES来指明, 对于只要编译不要安装的动态库使用 noinst_LTLIBRARIES来指明。
如果有不需要编译的可执行程序或者脚本也需要安装,那么可以通过dist_bin_PROGRAMS(要安装到bin目录的文件)来指定,如果是要安装到别目录的可执行程序,例如前面定义过test_PROGRAMS,那么想安装到test目录,可以使用dist_test_PROGRAMS。