指定 `bin_PROGRAMS` 的依赖项而不告诉 Automake 如何构建 `bin_PROGRAMS`

Posted

技术标签:

【中文标题】指定 `bin_PROGRAMS` 的依赖项而不告诉 Automake 如何构建 `bin_PROGRAMS`【英文标题】:Specify a dependency of `bin_PROGRAMS` without telling Automake how to build `bin_PROGRAMS` 【发布时间】:2016-09-17 00:48:39 【问题描述】:

因此,在我的 automake 设置中 bin_PROGRAMS 中的一些 *.c 文件依赖于通过从 main.h 创建符号链接生成的 no_common.h,现在在我的 Makefile.am no_common.h 的一些最近更改之前被包含在bin_PROGRAMS 中,以便它按应有的方式生成,但这也使它与make 生成的二进制文件一起安装到/usr/bin 中,这不是我想要的.

我知道我可以在我的 Makefile.am 文件中使用类似的东西:

$(bin_PROGRAMS): no_common.h

但这是否意味着我必须告诉make 我希望bin_PROGRAMS 如何构建?将no_common.h 放回bin_PROGRAMS 然后将其添加到noinst_HEADERS 会解决此问题吗?

这可以做到吗,我可以使用其他一些棘手的技巧,还是我只是要求一些无法做到的事情?

注意:我不想在受影响的文件中将文件 #includeno_common.h 更改为 main.h。 (是的,我知道我可能很挑剔)。

【问题讨论】:

【参考方案1】:

Automake 提供了BUILT_SOURCES 变量来解决这个问题。

BUILT_SOURCES 中提到的文件将在make 早期创建——在任何编译之前。但是,没有暗示其他依赖关系;也就是说,该文件已创建但未编译,并且不假定为任何其他特定 .o 的依赖项;这正是你想要的。

所以在你的情况下,你只需这样做:

BUILT_SOURCES = no_common.h

【讨论】:

以上是关于指定 `bin_PROGRAMS` 的依赖项而不告诉 Automake 如何构建 `bin_PROGRAMS`的主要内容,如果未能解决你的问题,请参考以下文章

列出python包依赖项而不加载它们?

Leiningen 中的本地依赖项而不创建 Maven 存储库?

未找到锁定文件。更新依赖项而不是从锁定文件安装。奥罗商业

选择下拉列表项而不触发 onchange 事件?

从两个排序数组中获取前 K 项而不合并它们

检索子文档中数组的第一项而不获取其他子文档