Automake + libtool:每个对象 CFLAGS 的模式规则?

Posted

技术标签:

【中文标题】Automake + libtool:每个对象 CFLAGS 的模式规则?【英文标题】:Automake + libtool: pattern rule for per-object CFLAGS? 【发布时间】:2014-11-18 18:15:33 【问题描述】:

我正在使用 GNU Automake 和 libtool 来编译我的程序。我的Makefile.am 看起来像这样:

lib_LTLIBRARIES = \
    libObjectively.la

libObjectively_la_SOURCES = \
    Array.c \
    Class.c \
    Condition.c \
    Date.c \
    DateFormatter.c \
    Dictionary.c \
    Lock.c \
    Log.c \
    Object.c \
    String.c \
    Thread.c

libObjectively_la_CFLAGS = \
    -I ..

libObjectively_la_LDFLAGS = \
    -pthread \
    -shared

一切都编译得很好。但是,我喜欢也可以使用模式规则为每个源文件设置CFLAGS。在常规的旧 Makefile 语法中,这看起来像:

%.o: %.c
    $(CC) $(CFLAGS) -D__Class=$(subst .o,,$@) -o $@ $<

有没有办法用 Automake + libtool 做到这一点?

【问题讨论】:

您的意思是要将-D__Class=$(subst .0,,$@) 添加到普通模式规则中? 我的意思是,我想以与 libtool 兼容的 Automake 兼容方式拥有该模式规则的等价物。我发布的模式规则只是它在 GNU Makefile 中的一个示例——而不是 Automake Makefile.am。 是的,但我试图了解您想要实际添加自己的那一部分。自动工具只是创建 make 使用的 makefile。这意味着内置规则仍然存在,等等。所以问题是-D 参数是您试图添加构建.o 文件的默认规则还是关于该行的其他内容?跨度> 明白了。这就是 10,000 美元的问题:我可以注入一个模式规则来劫持或增加 libtool 的编译步骤吗? 【参考方案1】:

事实证明,没有可移植的方式来做这种事情。

【讨论】:

以上是关于Automake + libtool:每个对象 CFLAGS 的模式规则?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 automake/libtool 库中获取符号列表?

安装 Autoconf, Automake & Libtool

automake 和 libtool 中的链接库问题

autoconf,automake,libtool

怎样查看autoconf,automake以及libtool是不是安装

如何正确更新 m4、autoconf、automake 和 libtool? Mac OSX