Build 如何使用Automake创建一个特定目录?

Build 如何使用Automake创建一个特定目录?,build,makefile,directory,automake,Build,Makefile,Directory,Automake,我只想知道我需要在Makefile.am中写什么才能在Makefile.am所在的同一目录中创建名为build的目录。您需要写: build: test -d ${srcdir}/build || mkdir ${srcdir}/build 但你真的不想这么做。源目录应视为只读。如果您只是想在build目录中创建一个名为build的目录,只需执行以下操作 build: test -d build || mkdir build 你需要写: build: test

我只想知道我需要在
Makefile.am
中写什么才能在
Makefile.am
所在的同一目录中创建名为
build
的目录。

您需要写:

build:
    test -d ${srcdir}/build || mkdir ${srcdir}/build
但你真的不想这么做。源目录应视为只读。如果您只是想在build目录中创建一个名为build的目录,只需执行以下操作

build:    
    test -d build || mkdir build

你需要写:

build:
    test -d ${srcdir}/build || mkdir ${srcdir}/build
但你真的不想这么做。源目录应视为只读。如果您只是想在build目录中创建一个名为build的目录,只需执行以下操作

build:    
    test -d build || mkdir build

仔细考虑您的问题:您真的想在与
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
等等)

AC_CONFIG_COMMANDS([mkdir], [$MKDIR_P build])

仔细考虑你的问题:你真的想在与
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
等等)

AC_CONFIG_COMMANDS([mkdir], [$MKDIR_P build])

问题是,我已经试过了,所以我不明白为什么我不能这么做。如果我错了,请纠正我。我运行:1)。/autogen.sh 2)。/configure 3)make,但我刚刚得到一个消息:“对象目录”build/“找不到”你的autogen.sh中有什么?您的Makefile.am中有什么试图引用
build
目录?通常,用户会使用类似于
mkdir build;光盘制作/path/to/configure&&make
。在Autogen中,实际上什么都没有。但是在Makefile.am中,我试图编译我的所有文件.c,并将它们放在这个新的构建目录中,并且有一个类似于二进制文件的共享库。问题是我正在手动创建“build”dir,这比较容易,但我想我可以在AM上完成。问题是我已经尝试过了,所以我不明白为什么我不能完成。如果我错了,请纠正我。我运行:1)。/autogen.sh 2)。/configure 3)make,但我刚刚得到一个消息:“对象目录”build/“找不到”autogen.sh中有什么?您的Makefile.am中有什么试图引用
build
目录?通常,用户会使用类似于
mkdir build;光盘制作/path/to/configure&&make
。在Autogen中,实际上什么都没有。但是在Makefile.am中,我试图编译我的所有文件.c,并将它们放在这个新的构建目录中,并且有一个类似于二进制文件的共享库。问题是,我正在手动创建“build”dir,这更简单,但我认为我可以在AM上完成。回答很好,但您可以使用比
[mkdir]
更好的标记,这很混乱,看起来像一个命令。对于读者来说,文档就在这里:如果您希望在安装时创建目录,该如何做?例如,您希望在/usr/local/lib/mypackagelibdir中创建一个目录,并将您的员工复制到那里。这个dir不同于普通的对象libs,例如您想要复制到/usr/local/lib/site\u perlExcellent answer的一些perl模块boo.pm,但是您可以使用比
[mkdir]
更好的标记,这很容易混淆,看起来像一个命令。对于读者来说,文档就在这里:如果您希望在安装时创建目录,该如何做?例如,您希望在/usr/local/lib/mypackagelibdir中创建一个目录,并将您的员工复制到那里。这个dir不同于普通的对象lib,例如一些要复制到/usr/local/lib/site\u perl的perl模块boo.pm