【问题标题】:How to affect order of targets, add additional steps etc. for Makefile.am?如何影响目标的顺序,为 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的,所以我可能只是迁移)

标签: makefile autotools automake


【解决方案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)不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2011-09-27
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2013-11-27
    • 2016-04-26
    相关资源
    最近更新 更多