automake:如何将文件复制到构建目录?

Ste*_*eve 10 automake

我正在自动化一个图书馆项目,这个项目有一些示例程序.我希望示例程序在dist中分发,但安装.

目前,演示程序的组织如下:

src/*.cpp (library source)
include/*.h (library headers)
demos/demo.cpp (example program)
demos/RunDemo (script to run demo)
Run Code Online (Sandbox Code Playgroud)

在构建软件之后运行RunDemo非常重要,无需"安装"步骤.

到目前为止,我已经能够使用noinst_PROGRAMS目标构建"demo"exectuable .但是,make在VPATH构建之后,可以使用以下命令:

build/src/.libs/libxxx.so  (etc..)
build/demos/demo
Run Code Online (Sandbox Code Playgroud)

如您所见,执行"demo"所需的RunDemo脚本不会复制到$(builddir).我已经尝试了一些东西,例如,添加RunDemodist_noinst_SCRIPTS,以及加入我自己的副本目标,并试图挂钩all.无论我怎么努力,我总是得到输出,

$ make RunDemo
make: Nothing to be done for `../../../projects/demo/RunDemo'.
Run Code Online (Sandbox Code Playgroud)

我似乎无法在builddir中创建一个目标,"如果此文件不在builddir中,则从srcdir复制它".

这可能与automake有关吗?

Gav*_*ith 7

./configure使用configure.ac脚本中的AC_CONFIG_LINKS宏(随附autoconf)的步骤之后,您可以在构建树中访问文件 .如果可能,它将创建一个符号链接,否则它将复制该文件.

在你的情况下,它看起来像

AC_CONFIG_LINKS([demos/RunDemo:demos/RunDemo])
Run Code Online (Sandbox Code Playgroud)

autoconf手册:

宏:AC_CONFIG_LINKS(dest:source ...,[cmds],[init-cmds])

使AC_OUTPUT链接每个现有文件到相应的链接名称dest.如果可能,建立符号链接,否则为可能的硬链接,否则为副本.该DEST的名称应该是相对于顶层源或建立目录

dist_noinst_SCRIPTS仍然需要使用文件来分发.