【问题标题】:How do I access a user defined variable as defined at the top of a Makefile.am file?如何访问 Makefile.am 文件顶部定义的用户定义变量?
【发布时间】:2013-01-25 16:52:49
【问题描述】:

具体来说,我想按照以下思路做一些事情。对于定义应如何构建库文件的 Makefile.am 脚本,我希望能够在整个过程中访问通用库名称。例如,假设我希望将库的名称称为“name”,我可以从以下变量开始:

LIBNAME = name

那我可能会有这样的事情:

lib_LTLIBRARIES = lib$(LIBNAME).la

但是当我想做以下事情时,automake 开始抱怨:

lib$(LIBNAME)_la_SOURCES = file1.cpp file2.cpp
lib$(LIBNAME)_la_LIBADD = ...

是否可以使用其他语法进行这样的操作,这样我就不必多次重复库的名称?

干杯,

本。

【问题讨论】:

  • 您是希望用户能够更改已安装库的名称,还是仅仅为了减少 Makefile.am 中的重复?
  • 我只是希望减少重复。我有很多 Makefile.am 文件散落在各处,我正试图找出使它们尽可能通用的方法。

标签: gnu-make autotools autoconf automake


【解决方案1】:

如果您在 configure 时间而不是在 Makefile 本身中定义变量,则可以这样做。

例如在configure.ac:

LIBNAME=name
AC_SUBST(LIBNAME)

然后你可以像这样在Makefile.am 中访问它:

lib_LTLIBRARIES = lib@LIBNAME@.la

【讨论】:

  • @WilliamPursell 即使您使用 lib@LIBNAME@.la 这样的文本替换创建您的 makefile?
  • 此解决方案不起作用! Automake 在解析 Makefile.am 时需要主节点的名称,因此配置时间替换不会解决任何问题。
  • 这里似乎工作得很好:github.com/ptomato/osxcart/blob/gtk3/osxcart/Makefile.am(我从另一个图书馆复制的,我忘了在哪里)
  • 这真的很漂亮。我很惊讶 automake 允许名称中包含 @ 字符,并且查看 automake 邮件列表存档我还没有找到关于这是否是故意的讨论,但这肯定是一个不错的功能。真的很遗憾,我只有一个赞成票。
  • 不过,我会推荐AC_SUBST([LIBNAME],[${LIBNAME:-defaultname}])
【解决方案2】:

那我可能会有这样的事情:

LIBNAME = 名称 lib_LTLIBRARIES = lib$(LIBNAME).la lib$(LIBNAME)_la_SOURCES = file1.cpp file2.cpp lib$(LIBNAME)_la_LIBADD = ...

IFAIK,这不适用于 automake。我也不认为可以使用其他语法来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2022-01-23
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2022-11-30
    相关资源
    最近更新 更多