从autotools configure中删除编译器/链接器标志

时间:2016-10-22 20:19:14

标签: makefile autotools configure ldflags cflags

可以使用./configure && make && make install构建一个项目(C的Antlr3)。

编译命令中使用的标志之一是-Wl,-soname -Wl,libantlr3c.so。整个命令是:

libtool: link: gcc -shared  .libs/antlr3baserecognizer.o .libs/antlr3basetree.o \
.libs/antlr3basetreeadaptor.o .libs/antlr3bitset.o .libs/antlr3collections.o \
.libs/antlr3commontoken.o .libs/antlr3commontree.o .libs/antlr3commontreeadaptor.o \
.libs/antlr3commontreenodestream.o .libs/antlr3convertutf.o .libs/antlr3cyclicdfa.o \
.libs/antlr3debughandlers.o .libs/antlr3encodings.o .libs/antlr3exception.o \
.libs/antlr3filestream.o .libs/antlr3inputstream.o .libs/antlr3intstream.o \
.libs/antlr3lexer.o .libs/antlr3parser.o .libs/antlr3rewritestreams.o \
.libs/antlr3string.o .libs/antlr3tokenstream.o .libs/antlr3treeparser.o    \
-m64   -Wl,-soname -Wl,libantlr3c.so -o .libs/libantlr3c.so

如何仅删除-Wl,-soname -Wl,libantlr3c.so部分?

我知道编译器和链接器标志可以在configure命令中用CFLAGSLDFLAGS覆盖。根据{{​​3}},它就像

./configure CFLAGS=blah LDFLAGS=blah

虽然我知道它们可以/应该用作环境变量,例如

CFLAGS=BLAH LDFLAGS=blah ./configure

但是,我认为这些用途会尝试覆盖所有CFLAGSLDFLAGS。我只想排除-soname标志(据我所知,-Wl,表示编译器将标志传递给链接器。

到目前为止,我对LDFLAGS=-soname=CFLAGS="-Wl,soname -Wl,"等内容及其变体的尝试都没有成功。

this link看起来好像可以从Makefile中删除标志,但我看不到适用于使用configure命令从命令行覆盖标志。也可以将这些变量提供给make命令而不是configure命令,但这也不成功。

注意,更改Makefile是没有意义的,因为它是由configure命令生成的。

1 个答案:

答案 0 :(得分:0)

您无法删除-soname,因为它是您使用GCC构建共享库的方式的一部分,直接来自libtool。因为你没有真正为没有soname的ELF构建一个共享对象(好吧,你可以,但它并没有用)libtool不会让你删除它。

你可能最好宣布你想要达到的目标,因为我觉得在这种情况下它与-soname没有任何关系。