如何影响目标的顺序,为 Makefile.am 添加额外的步骤等?

Posted

技术标签:

【中文标题】如何影响目标的顺序,为 Makefile.am 添加额外的步骤等?【英文标题】:How to affect order of targets, add additional steps etc. for Makefile.am? 【发布时间】:2010-12-16 21:10:34 【问题描述】:

我可以像管理 Makefile 一样管理 Makefile.am 吗?

通常我会创建相互调用的目标以构建项目。

但在 Makefile.am 中我有一些神秘的 libqqq_la_SOURCES = ...,我不知道它到底在做什么。

在哪里编写应该为给定源使用的编译器?在哪里添加“qqq.c is generated from qqq.vala”的步骤?

如何将 Makefile.am 写成 Makefile?

【问题讨论】:

如果您不知道 Automake 在做什么,而且您习惯直接使用 makefile,为什么还要使用它?你的目标是什么? 因为我正在编辑使用automake的项目。 (新版本其实是用qmake的,所以我可能只是迁移) 【参考方案1】:

1.11 中的 Automake 确实支持 Vala。

配置.ac:

AM_PROG_VALAC

Makefile.am:

AM_VALAFLAGS = 其他 不管_SOURCES = xxx.vala

【讨论】:

【参考方案2】:

Automake 会自动将您在 Makefile.am 中指定的任何 Make 目标复制到生成的 Makefile 中。因此,您只需将其包含在 .am 文件中即可生成任何自定义的复杂事物。

但是,您不应该对所有东西都这样做——这会破坏 Automake 试图为您提供的好处。指定

bin_PROGRAMS=foo
AM_CFLAGS=$(DEPS_CFLAGS)
foo_SOURCES=file1.cpp file2.cpp
foo_LDADD=$(DEPS_LIBS)

无论如何都会生成一个标准的 Make 目标。我建议你学习使用 Automake 宏来处理大多数标准的事情——那样会更便携。

了解 Autotools 丰富多样的功能的最佳方式不是阅读手册,因为它太复杂且难以组织。我的建议只是采用与您的构建风格(依赖项、平台等)相似的现有开源 GNU 项目,并检查其 Autoconf 和 A​​utomake 文件。已建立的项目已经学到了很多可以借鉴的技巧。

【讨论】:

Vala、C 和 C++ 的混合体是哪一个? Automake 应该会根据扩展自动找出 C 和 C++。它对 Vala 没有一流的支持,但这里有一个关于为任意语言添加一些基本支持的链接:tinf2.vub.ac.be/~dvermeir/manuals/automake/… 如果你的项目真的很“流行”(三种语言的组合,其中一种是非常非主流),那么 Autotools 可能不太适合无论如何,为您的项目。 Vala 的便携性如何? AM_CPPFLAGS 用于预处理器标志,您应该将 AM_CFLAGS 用于 CFLAGS。 注意:-D 和 -I (-DFOO -Iinclude/) 是处理器标志,但 -f(例如 -ffast-math)不是。

以上是关于如何影响目标的顺序,为 Makefile.am 添加额外的步骤等?的主要内容,如果未能解决你的问题,请参考以下文章

makefile.am 变量在 make 命令中的目标文件之后设置一些库

我应该如何从 Makefile.am 运行预构建的 Makefile?

如何在 Makefile.am 中调整 PATH 变量?

如何在 Makefile.am 中指定我想要 C++0x?

Mono:如何在 Makefile.am 中添加 DLL 引用?

如何将预单元测试步骤添加到我的*** Makefile.am?