Automake:依赖于构建结果

我使用automake和autoconf。 在子目录src / Makefile.am中包含
bin_PROGRAMS = hello
hello_SOURCES = hello.c
在构建你好之后,我想在二进制文件上运行一个工具(系统上安装了一些分析器/优化器)来修改它(例如条带)或生成统计数据(例如矮人,pahole ......)。为此,top-level-directory中的Makefile.am包含
tool:
         tool src/hello
使用make和执行make工具构建hello时一切都很好。当用户运行make工具而不构建二进制文件时,会出现问题。如何强制构建bin_PROGRAMS(可能是列表)或只是将hello二进制文件构建为目标工具的依赖项? 也不
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时它不会更新输出。如果这是可以接受的,那么这是一个合理的解决方案。另一种选择是: tool-output:你好         工具你好 在src / Makefile.am中,在src / Makefile.am的noinst_DATA中列出工具输出。     

要回复问题请先登录注册