2011-02-14 165 views
3

我是自动工具的新手,并且设法创建一个满足configure.ac的时间。 现在我想指定某处(configure.ac,Makefile.am或其他地方),在成功完成“make”之后,会打印一条短信。就像“确保你已经在你的LD_LIBRARY_PATH中包含了正确的路径”。但是,当我在Makefile.in中指定它时,执行“automake”会覆盖此文件(如预期的那样)。所以我还没有找到如何扩展Makefile.am在终止其中一个目标的编译时包含一个“echo确保你已经在你的LD_LIBRARY_PATH中包含了正确的路径”。 ATM我只有一个目标(bin_PROGRAMS = myprog)。除此之外,编译等工作正常。但作为可能的“联合国”有经验的用户的信息,我真的想打印出一些最终的建议。在Makefile.am中成功完成后打印一些东西

有没有办法做到这一点?

谢谢,最好的问候。

P.S.我知道cmake并且还没有使用它,目前,我想使用autotools和automake。

+0

虽然答案和埃德温·巴克的评论是有很大的帮助,我意识到,这不是那么简单以当一个打印纯粹的“make”。于是我转而指定要为主目标打印什么内容。这有一些缺点(需要定义_every_新的主要目标,并行构建中未知的外观时间等)。因此,我个人的建议是将这也包括在install-exec-hook中,特别是如果报告/警告/注释对于用户知道并且不依赖于他/她来阅读文档非常重要;) – Shadow 2011-02-15 08:38:58

回答

7

----编辑为安装-EXEC钩是有用的,但这里的100%的回答----

扩展你的Makefile,通过更换 “安装:” 目标在Makefile.am

以下添加到“Makefile.am”

install: install-am 
     echo "Don't forget to set your LD_LIBRARY_PATH" 

对于这个工作,你必须先找到在生成的Makefile中的安装目标,并将其复制到Makefile.am。这可以确保您不会破坏automake的目标如何相互依赖。

然后,您可以像在任何Makefile中那样在目标下添加命令。请注意,这是在Makefile.am中完成的,因此当automake构建它的Makefile.in和Makefile时,它将通过它通常提供的默认值获取您的目标。

这将使您的“警告”更接近非平行构建的结尾。危险之处在于您必须确保您的“安装”目标的覆盖与automake的要求保持一致。

另外,如果他们运行“make install-exec”,您的警告将不会报告。如果您决定让它在报告“使安装-EXEC”,那么你应该

  1. 删除报告定制 为“使安装”(避免 双报告)。
  2. 添加报告 定制为“make install-exec”(报告库 添加警告)。
  3. 自定义install-am 目标在安装可执行文件之前安装数据 。

例如使用安装定制删除

// note the lack of install: override int Makefile.am 
install-exec: install-exec-am 
     echo "Be sure to update your LD_LIBRARY_PATH" 

install-am: all-am 
    @${MAKE} $(AM_MAKEFLAGS) install-data install-exec 

----原帖如下----

您的报告确实应该在安装时作出。在autotools平台中有两个安装目标:install-data和install-exec。共享库正确地位于“exec”类别下。

一个安装EXEC挂机添加到makefile.am

基本上它看起来有点像:

install-exec-hook: 
     echo "Be sure to set your LD_LIBRARY_PATH!" 

安装数据,安装-EXEC,卸载,距离,和distcheck所有支持“挂钩”扩展。

只要保证它在构建结束时运行,就会有点困难。 Make/Automake被构造为允许并行构建,并且会干扰它在构建结束时运行的保证。

+0

您。这是一个有趣的观点。其实,我同意你的看法,这与安装时间有关。尽管如此,在完成“make”之后还有类似的方法吗?在本地,我经常遇到用户只想构建但不安装的情况,因此这对于这些用户来说是一个有用的报告。虽然我们当然可以争辩说这不是最好的做法...... – Shadow 2011-02-14 16:22:52

+0

纯粹的make会调用“make all”,因为它是automake生成文件中的第一个目标。如果您想要扩展该功能,请按照与上述步骤类似的步骤进行操作,但请按照下面的步骤覆盖“all-”目标,以依靠添加消息的“all-am”。 – 2011-02-14 16:41:48

4

就在顶层Makefile.am添加本地钩:

 
all-local: 
     @echo 'Make sure...'