【发布时间】:2020-07-23 17:56:44
【问题描述】:
我正在使用 autotools 构建一个我想为 Linus 和 Mac OSX 交叉编译的项目。我正在构建两个库,libevent.la 和 libaffinity.la。 libevent 应该在两个平台上运行 automake 时构建。但是,libaffinity.la 只有在平台是 MACOSX 时才应该构建。为此,我的configure.ac 文件中有以下内容:
#Detect the target system
case "$host_os" in
darwin*)
build_darwin=yes
;;
esac
AM_CONDITIONAL([DARWIN], [test "$build_darwin" = "yes"])
如果项目是在 Mac OS 上构建的,将设置变量DARWIN。在Makefile.am 我有以下内容:
extlibdir = $(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions
extlib_LTLIBRARIES = libevent.la
AM_CFLAGS = -I$(srcdir) $(WARN_CFLAGS) $(DEBUG_CFLAGS)
libevent_la_SOURCES = libevent.c
libevent_la_CFLAGS = $(AM_CFLAGS) $(GUILE_CFLAGS) -Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined
libevent_la_LIBADD = $(GUILE_LIBS)
libevent_la_LDFLAGS = -export-dynamic -module
$(GOBJECTS): libevent.la
if DARWIN
extlib_LTLIBRARIES += libaffinity.la
affinity_la_SOURCES = affinity.c
affinity_la_CFLAGS = $(AM_CFLAGS) $(GUILE_CFLAGS) -Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined
affinity_la_LIBADD = $(GUILE_LIBS)
affinity_la_LDFLAGS = -export-dynamic -module
$(GOBJECTS) += libaffinity.la
endif
当我运行make 时,它失败并出现以下错误:
extlib_LTLIBRARIES += affinity.la
make[1]: extlib_LTLIBRARIES: 没有这样的文件或目录
make: *** [all] 错误 2
但是,如您所见,extlib_LTLIBRARIES 定义在 if 语句之上。
我该如何解决这个问题?或者有没有更好的方法可以让我有选择地基于平台构建libaffinity.la?
【问题讨论】:
-
我认为这不是您描述的问题的原因,但首先将工件的名称更改为有条件构建为
libaffinity.la,而不是affinity.la。 -
Makefile.am中的条件内的行是缩进的。您不可能为此使用制表符,是吗?即使您不是有意这样做,也值得确保您的编辑器没有使用选项卡代替空格。经过反思,我认为这是错误性质的一个很好的候选者。该错误消息与make将缩进的行解释为规则配方的(部分)一致。 -
@JohnBollinger。删除标签解决了这个问题!那么这是否意味着标签在 automake 中引入了某种新的范围?
-
Makefile.am中的几乎所有内容最终都会结转到由make处理的Makefile。对于make——毕竟这是报告错误的原因——标签很重要。
标签: makefile autoconf automake