關於 {bin,noinst,check,EXTRA}_PROGRAMS 在
之前的文章已經介紹過了
剩下來的 {sbin,libexec,pkglib}_PROGRAMS 跟 bin_PROGRAMS 其實都是在 $make install 會安裝到預設的目錄底下
差別只在於安裝到哪個目錄底下,例如以下的 Makefile.am
bin_PROGRAMS = main1
sbin_PROGRAMS = main2
libexec_PROGRAMS = main3
pkglib_PROGRAMS = main4
noinst_PROGRAMS = main5
check_PROGRAMS = main6
EXTRA_PROGRAMS = main7
main1_SOURCES = main.c
main2_SOURCES = main.c
main3_SOURCES = main.c
main4_SOURCES = main.c
main5_SOURCES = main.c
main6_SOURCES = main.c
main7_SOURCES = main.c
如果沒有特別指定或改變 prefix 最後安裝的情況會像下面這樣
usr
`-- local
|-- bin
| `-- main1
|-- lib
| `-- hello
| `-- main4
|-- libexec
| `-- main3
`-- sbin
`-- main2
main1 這個執行檔如預期會安裝到 bin 底下
main2 類似 main1 會安裝到 sbin 底下
另外比較不常見的 libexec_PROGRAMS 則會讓 main3 安裝在 libexec 底下
還有 pkglib_PROGRAMS 會讓 main4 安裝在 lib/hello 底下,其中的 hello 就是 configure.ac 裡面的 package name
configure.ac 如下:
AC_PREREQ([2.63])
AC_INIT([hello], [0.0], [fourdollars@gmail.com])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
當然有點經驗的 Autotools 使用者都會知道這個 configure.ac 是用 $ autoscan 產生的 configure.scan 修改而來的
剩下的 main5, main6, main7 如
前一篇文章所介紹的一樣,是不會安裝進系統之中的