我试图定义一个Automake规则,该规则将生成一个文本文件,其中包含将由同一个Makefile构建和安装的libtool库的完整路径。是否有一种直接的方法来检索libtool库的输出文件名(正在构建程序的平台的正确扩展名)?
例如,我正在尝试写这样的东西:
lib_LTLIBRARIES = libfoo.la
bar.txt:
echo $(prefix)/lib/$(libfoo_la) >$@
$(libfoo_la)
将扩展为libfoo.so
,libfoo.dylib
或libfoo.dll
(或其他任何内容),具体取决于平台。这实际上是生成的libtool库文件中dlname
参数的值。我可以直接从中提取文件名,但我希望有一种更简单的方法来实现这一点。
答案 0 :(得分:1)
不幸的是,我没有找到这样做的方法。 幸运的是,对于你来说,我确实有一个小的sed脚本被攻击在一起做得很好 你想要什么,并砍掉它所以它确实做你想要的。
<强> foo.sed 强>
# kill non-dlname lines
/^\(dlname\|libdir\)=/! { d }
/^dlname=/ {
# kill leading/trailing junk
s/^dlname='//
# kill from the last quote to the end
s/'.*$//
# kill blank lines
/./!d
# write out the lib on its own line
s/.*/\/&\n/g
# kill the EOL
s/\n$//
# hold it
h
}
/^libdir=/ {
# kill leading/trailing junk
s/^libdir='//
# kill from the last quote to the end
s/'.*$//
# paste
G
# kill the EOL
s/\n//
p
}
<强> Makefile.am 强>
lib_LTLIBRARIES = libfoo.la
bar.txt: libfoo.la foo.sed
sed -n -f foo.sed $< > $@