我有这个makefile automake的代码:
noinst_LTLIBRARIES = libwinsane.la
libwinsane_la_SOURCES = init.c
libwinsane_la_CXXFLAGS = -I$(top_srcdir)
libwinsane_la_DEPENDENCIES = manifest.$(OBJEXT)
libwinsane_la_LIBADD = manifest.$(OBJEXT)
manifest.$(OBJEXT): manifest.rc utf8.xml
windres -o $@ $(top_builddir)/libwinsane/manifest.rc它配置得很好,但是最后,“make”命令的结果会出现错误:
libtool: error: cannot build libtool library 'libwinsane.la' from non-libtool objects on this host: manifest.o但我相信,libtool.o完全可以与init.o合并。o,我不明白,为什么libtool会抱怨这么难。有什么解决办法吗?
发布于 2022-06-13 09:42:11
noinst_LTLIBRARIES = libwinsane.la
libwinsane_la_SOURCES = init.c
libwinsane_la_CXXFLAGS = -I$(top_srcdir)
libwinsane_la_LIBADD = manifest.lo
libwinsane_la_DEPENDENCIES = manifest.$(OBJEXT)
manifest.$(OBJEXT): manifest.rc utf8.xml
libtool --mode=compile windres -o $@ $(top_builddir)/libwinsane/manifest.rc发布于 2022-08-05 06:58:17
因为涉及到libtool,所以为了保持一致性,可以使用.lo后缀。这将有助于检测源文件的双重使用(*)。
.rc.${OBJEXT}:
${RC} $< $@
.rc.lo:
libtool --mode=compile --tag=RC ${RC} $< $@相应的主makefile片段来使用它,我会这样做:
lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = manifest.rc
libfoo_la_LIBADD = manifest.lo
manifest.lo: utf8.xml
# Alternatively:
# bin_PROGRAMS = foo
# foo_SOURCES = manifest.rc
# foo_LDADD = manifest.o
# (*) Be wary of the usual "object 'manifest.$(OBJEXT)' created both with libtool and without"如果automake在未来获得了.rc源代码的默认规则,这似乎是一种向前兼容的方法,因为automake将再次将manifest.lo添加到LIBADD,这是幂等的。
对于默认RC,可以将以下内容添加到configure.ac中:
LT_PROG_RChttps://stackoverflow.com/questions/72593009
复制相似问题