【问题标题】:automake: How do I copy files to the build directory?automake:如何将文件复制到构建目录?
【发布时间】:2013-09-30 17:02:01
【问题描述】:

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

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

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

重要的是,在构建软件后可以运行 RunDemo,而不需要“安装”步骤。

到目前为止,我已经能够使用noinst_PROGRAMS 目标构建“演示”可执行文件。但是,在 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 可以做到这一点吗?

【问题讨论】:

    标签: automake


    【解决方案1】:

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

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

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

    来自autoconf manual

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

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

    使用dist_noinst_SCRIPTS 仍然是分发文件所必需的。

    【讨论】:

    • 有没有办法用目录而不是文件来做到这一点?
    • 我认为AC_CONFIG_LINKS([directory:directory]) 不起作用?我不知道为什么会这样,但您可以尝试使用srcdirbuilddir 变量编写一个命令以使用AC_CONFIG_COMMANDS 复制它。
    • AC_CONFIG_LINKS 真的很想在文件上工作,但是如果你小心如何测试 $srcdir,你可以做目录——你必须配置它,这样你就永远不会运行 AC_CONFIG_LINKS,除非你在构建中目录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多