如何使用 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 变成Makefileconfig.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 创建一个特定目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 automake 安装数据目录树

使用 autoconf/automake,如何指定包含文件路径?

如何使用 JNI/JNA 可以使用的 automake 创建共享库(dylib)?

如何将 automake 文件写入递归构建子目录?

如何创建自定义后缀规则以使用另一个目录中的标题?

如何在 KDevelop 中为基于 automake 的项目添加自定义构建步骤?