我正在尝试添加一些 shell 命令以在我的项目 autoconf 中自动搜索 Makefile.am(这样我就不必担心下次有新的 Makefile.am 时忘记添加条目)。但这似乎不起作用。我试图创建一个最小的项目设置来说明这个问题。项目目录包含:
├── AUTHORS
├── ChangeLog
├── common.mk.in
├── configure.ac
├── COPYING
├── INSTALL
├── install-sh
├── Makefile.am
├── missing
├── NEWS
├── proj1
│ ├── Makefile.am
│ ├── module1
│ │ └── Makfile.am
│ └── module2
│ └── Makfile.am
├── proj2
│ ├── Makefile.am
│ ├── module1
│ │ └── Makfile.am
│ └── module2
│ └── Makfile.am
└── README
这里的大多数文件都是空的,除了:
---------configure.ac---------
AC_INIT([TEST], [1.0])
found_makefile_am=`find . -name 'Makefile.am' | sed -e 's/\.am$//g' -e 's/^\.\///g' | sed ':a;N;$!ba;s/\n/ /g'`
found_mk=`find . -name '*.mk.in' | sed -e 's/\.am$//g' -e 's/^\.\///g' | sed ':a;N;$!ba;s/\n/ /g'`
AM_INIT_AUTOMAKE
#AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
AC_CONFIG_FILES([${found_makefile_am}])
AC_CONFIG_FILES([${found_mk}])
AC_OUTPUT
---------proj*/Makefile.am------
SUBDIRS = module1 module2
请注意,该行:
AC_CONFIG_FILES([${found_mk}])
完美的作品,但这个:
AC_CONFIG_FILES([${found_makefile_am}])
失败:
$autoreconf -i
automake-1.12: error: no 'Makefile.am' found for any configure output
automake-1.12: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?
autoreconf-2.69: automake failed with exit status: 1
我不得不将其替换为:
AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
在我看来,在 autoconfig 调用 automake 之前,shell 变量没有正确扩展。那么有没有办法解决这个问题呢?