Automake:依赖于构build结果

我使用automake和autoconf。

在子目录src / Makefile.am中包含

bin_PROGRAMS = hello hello_SOURCES = hello.c 

构build好你好之后,我想在二进制文件上运行一个工具(一些安装在系统上的分析器/优化器)来修改它(例如strip)或生成统计数据(例如矮人,pahole等)。 为此目的,顶层目录中的Makefile.am包含

 tool: tool src/hello 

当build立你好与执行制造工具一切都很好。 当用户运行制作工具而不构build二进制文件时会出现问题。 我怎样才能强制build立bin_PROGRAMS(可能是一个列表)或只是作为目标工具的依赖关系的问候二进制文件?

也不

 tool: bin_PROGRAMS tool src/hello 

也不

 tool: src/hello tool src/hello 

工作。

名为“tool”的Makefile目标应该创建一个名为“tool”的文件。 由于“工具”已经存在,Make假定它不需要再次运行命令(我简化了,但只是一点点)。

像这样的构造应该工作:

 tool_output: tool src/hello tool src/hello > tool_output 

此外,一般来说,我相信你不能使用bin_PROGRAMS或任何其他Automake 变量 (分配= )作为依赖 ,但我可能是错的。

你要:

工具:$(bin_PROGRAMS)

但是,如果明确指定src / hello,则会遇到同样的问题。 (也就是说,顶层的Makefile不知道如何在src中建立hello)。你可能会做更好的事情:

工具:
         cd src && $(MAKE)$(AM_MAKEFLAGS)工具

在顶层,把实际的规则放在src / Makefile.am中,在那里你可以列出依赖关系。 但这也是一个非常糟糕的主意。 可能最好的办法是使用一个全地方的规则,并把类似的东西:

所有本地:
        工具你好

在src / Makefile.am中。 这将确保工具在运行make时不运行任何参数,但在重建hello时不会更新输出。 如果这是可以接受的,那么这是一个合理的解决方案。 另一个选择是做:

工具输出:你好
        工具你好

在src / Makefile.am中列出工具输出,在src / Makefile.am中列出noinst_DATA中的工具输出。