我正在自动化一个库项目,这个项目有一些示例程序。我希望示例程序在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一起使用吗?
答案 0 :(得分:7)
您可以在./configure
步骤之后使用您的configure.ac脚本中的AC_CONFIG_LINKS
宏(随autoconf
提供)在构建树中访问文件。如果可能,它将创建一个符号链接,否则它将复制该文件。
在你的情况下,它看起来像
AC_CONFIG_LINKS([demos/RunDemo:demos/RunDemo])
宏:AC_CONFIG_LINKS(目的地:来源......,[cmds],[init-cmds])
将AC_OUTPUT链接到每个现有文件 source 相应的链接名称 dest 。如果可能,建立符号链接, 如果可能的话,否则是硬链接,否则是副本。 dest 和 source 名称应该相对于顶级源或构建 目录
仍然需要使用dist_noinst_SCRIPTS
来分发文件。