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

时间:2013-09-30 17:02:02

标签: automake

我正在自动化一个库项目,这个项目有一些示例程序。我希望示例程序在dist中分发,但 not 已安装。

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

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

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

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

build/src/.libs/libxxx.so  (etc..)
build/demos/demo

如您所见,执行“demo”所需的RunDemo脚本不会复制到$(builddir)。我尝试了一些方法,例如,将RunDemo添加到dist_noinst_SCRIPTS,以及添加我自己的副本目标并尝试挂钩all ..无论我尝试什么,我总是得到输出,

$ make RunDemo
make: Nothing to be done for `../../../projects/demo/RunDemo'.

我似乎无法在builddir中创建一个目标,“如果此文件不在builddir中,请从srcdir复制它。”

这可以与automake一起使用吗?

1 个答案:

答案 0 :(得分:7)

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

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

AC_CONFIG_LINKS([demos/RunDemo:demos/RunDemo])

来自autoconf manual

  

宏:AC_CONFIG_LINKS(目的地:来源......,[cmds],[init-cmds])

     

将AC_OUTPUT链接到每个现有文件 source   相应的链接名称​​ dest 。如果可能,建立符号链接,   如果可能的话,否则是硬链接,否则是副本。 dest 和    source 名称应该相对于顶级源或构建   目录

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