如何使用 Automake 创建一个特定目录?
Posted
技术标签:
【中文标题】如何使用 Automake 创建一个特定目录?【英文标题】:How do I create one specific directory with Automake? 【发布时间】:2012-09-10 15:10:32 【问题描述】:我只是想知道我需要在Makefile.am
中写什么来在Makefile.am
所在的同一目录中创建一个名为build
的目录。
【问题讨论】:
【参考方案1】:仔细想想你的问题:你真的想在Makefile.am
的同一目录中创建build
,还是在调用configure
时在当前工作目录中创建?这些并不总是一回事:GNU 构建系统旨在支持树外构建(可能是只读的$srcdir
),因此最终用户应该期望以下工作:
$ tar xf autofoo-1.2.tar.gz
$ mkdir autofoo-build
$ cd autofoo-build
$ ../autofoo-1.2/configure
$ make
$ sudo make install
现在,我发现创建目录的最简单方法是根本不使用 Makefile.am,而是让 config.status
执行它(这是最后执行所有模板替换的 shell 脚本configure
,将Makefile.in
变成Makefile
,config.h.in
变成config.h
等等)。在configure.ac
中,输入以下内容:
AC_CONFIG_COMMANDS([mkdir], [$MKDIR_P build])
【讨论】:
很好的答案,但您可以使用比[mkdir]
更好的 标签,这很令人困惑,看起来像一个命令。对于读者,文档在那里:gnu.org/software/autoconf/manual/autoconf-2.60/html_node/…
如果你想在安装时创建一个目录,你该怎么做?例如,您想在 /usr/local/lib/mypackagelibdir 中创建一个目录并将您的人员复制到那里。这个目录不同于普通的对象库,比如一些perl模块boo.pm你要复制到/usr/local/lib/site_perl
也许比AC_CONFIG_COMMANDS([mkdir], [$MKDIR_P build])
更简单的是AC_CONFIG_COMMANDS([build/mkdir], [true])
让autoconf 生成build
目录。【参考方案2】:
你需要写:
build:
test -d $srcdir/build || mkdir $srcdir/build
但你真的不想这样做。源目录应该被认为是只读的。如果你只是想在 build 目录中创建一个名为 build 的目录,就这样做
build:
test -d build || mkdir build
【讨论】:
问题是我已经尝试过了,所以我不明白为什么我不能这样做。如我错了请纠正我。我运行:1) ./autogen.sh 2) ./configure 3) make 但我刚刚得到这个:“找不到对象目录“build/”” 你的 autogen.sh 中有什么?你的 Makefile.am 中有什么试图引用build
目录?通常,用户会使用mkdir build; cd build; /path/to/configure && make
之类的内容创建目录。
在 Autogen 中什么都没有。但是在 Makefile.am 中,我试图编译我所有的 files.c 并将它们放在这个新的构建目录中,并且像二进制文件的共享库一样。问题是我正在手动创建“构建”目录,这更容易,但我认为我可以在 AM 上完成。以上是关于如何使用 Automake 创建一个特定目录?的主要内容,如果未能解决你的问题,请参考以下文章
使用 autoconf/automake,如何指定包含文件路径?