makefile - 尝试运行特定于平台的构建时 Automake 失败
问题描述
我正在使用 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"])
DARWIN
如果项目是在 Mac OS 上构建的,则将设置该变量。在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: *** [全部] 错误 2
但是,正如您所见,extlib_LTLIBRARIES是在 if 语句上方定义的。
我怎样才能解决这个问题?或者有没有更好的方法来做到这一点,以便我可以有选择地libaffinity.la
基于平台构建?
解决方案
主要问题是条件部分中的行用制表符缩进。这些对 Automake 来说并不是特别重要,但它们将一直传递到其 generated Makefile.in
,并从那里传递到Makefile
generate by configure
。制表符对以下内容很重要make
:前导制表符是如何make
识别规则配方的行。(只有制表符可以;空格的意义不同。)
因此,效果被make
解释extlib_LTLIBRARIES += libaffinity.la
为某个规则的配方中的命令之一,因此当它尝试应用该规则时,它想要执行一个名为extlib_LTLIBRARIES
. 在路径中找不到这样的可执行命令,shell 失败并报告“没有这样的文件或目录”,该消息make
转发到它自己的输出。
解决方法是避免在您的Makefile.am
(空格是可以的)中使用制表符缩进,除非您实际上打算为make
规则编写配方(初始制表符是强制性的)。
推荐阅读
- spring-boot - 如何为lamda表达式编写junits
- python-3.x - 使用 nunique 标记数据框中的重复值但出现错误
- amazon-web-services - 为什么 AWS Glue 工作有时似乎在工作中使用较少的执行者
- ansible - Ansible - 从清单主机名定义的变量列表中的项目列表
- c++ - 英特尔 C++ 编译器 (19.0) 现在是否只使用 Clang 前端(即已经放弃 EDG)?
- python - Python中奇怪的字符串格式
- python - django modeladmin中的django多表继承
- extjs - Extjs Grid ApplyState not reflecting the changes | Hide issue
- go - go - 如何从x509证书公钥中获取字符串?
- angular - 在 for 循环中动态设置样式