我是autotools的新手,并且设法创建了一个令人满意的configure.ac。 现在我想在某个地方(configure.ac,Makefile.am或者其他地方)指定在成功“make”之后,打印一个简短的注释。像“确保你在LD_LIBRARY_PATH中也包含了正确的路径”之类的东西。
但是,当我在Makefile.in中指定它时,执行“automake”会覆盖此文件(如预期的那样)。所以我还没有找到如何扩展,例如Makefile.am包含一个“echo确保你在一个目标的编译终止时也包含了LD_LIBRARY_PATH中的正确路径”。 ATM我只有一个目标(bin_PROGRAMS = myprog)。除此之外,编译等工作正常。但作为可能“没有”经验的用户的信息,我真的想打印出一些最终建议。
有没有办法实现这个目标?
谢谢你,并致以最诚挚的问候。
P.S。我知道cmake并且尚未使用它,目前,我想使用autotools和automake。
答案 0 :(得分:7)
----编辑为install-exec-hook很有用,但这里是100%的答案----
通过替换Makefile.am
中的“install:”目标来扩展Makefile将以下内容添加到“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”,您的警告将不会报告。如果您决定在“make install-exec”中进行报告,那么您应该
删除安装自定义的示例
// 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”类别。
将install-exec-hook添加到makefile.am
基本上看起来有点像:
install-exec-hook:
echo "Be sure to set your LD_LIBRARY_PATH!"
install-data,install-exec,uninstall,dist和distcheck都支持“-hook”扩展。
只要保证它在构建结束时运行,就会有点困难。 Make / Automake构建为允许并行构建,并且干扰它将在构建结束时运行的保证。
答案 1 :(得分:4)
只需在顶级Makefile.am中添加一个本地钩子:
all-local: @echo 'Make sure...'