GNU 构建系统不使用obj/
目录,因此自动工具不支持该目录。
不过我可以想到两种方法来解决这个问题。
作为安装程序,您可以通过键入以下内容从其源目录构建任何包
mkdir builddir
cd builddir
../path-to-sourcedir/configure
make
然后将在中创建任何输出文件builddir/
目录。这种编译方案使得可以编译存储在只读目录中的源代码(这在 FSF 分发带有未压缩源代码的 CD 的年代更有意义),或者使用不同的设置编译相同的源代码(甚至是不同的架构)。
作为打包者,强制你的包构建所有内容的唯一方法obj/
就是把你的Makefile.am
in obj/
,并在那里声明所有构建规则。这意味着obj/Makefile.am
看起来像:
bin_PROGRAMS = foo bar
foo_SOURCES = ../src/foo/main.c ../src/foo/help.c ../src/foo/list.c
bar_SOURCES = ../src/bar/bar.c
我记得 10 年前,POSE(Palm OS 模拟器)使用了类似上述的设置。我不推荐它,因为它实际上不可维护。最好坚持工具的理念,并使用像其他 GNU 软件包一样工作的构建系统。
关于GNU Build System的介绍,我推荐阅读Automake手册的介绍:http://www.gnu.org/software/automake/manual/automake.html#GNU-Build-System http://www.gnu.org/software/automake/manual/automake.html#GNU-Build-System
特别是用例部分。
如果您不关心这些用例,我认为您最好的做法是不要使用 Automake,并构建自己的 Makefile。否则你会一直试图强迫 Automake 做一些它不适合的事情,你很快就会讨厌它。
编辑2013-08-26:请注意,Automake 项目使用名为using obj/不便于携带 http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/obj_002f-and-Make.html到 BSD 使。