如何知道它是否配置为在Makefile.am中使用libtool构建共享库

时间:2016-10-03 05:51:09

标签: autotools automake libtool

我的项目使用autotools并包含一个库和一个使用该库的程序。我想知道它是否配置为构建共享库以相应地更改程序的编译选项。 Makefile.am应该是这样的:

if BUILDING_SHARED_LIBRARY
my_program_CFLAGS += -DBUILDING_SHARED_LIBRARY
endif

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

所以:

configure.ac

libtool中不起作用? a.each_index.map { |i| a[i]+b[i] } # => [1, 5, 7, 7, 7] 将自行设置一些用于构建共享库的编译器标志。

答案 1 :(得分:1)

我已阅读源代码,发现Makefile.am没有界面。 configure将直接将配置写入libtool,并且不会向automake公开。

答案 2 :(得分:0)

我找到的最佳解决方案建立在ldav1s的答案上,如下所示:

if BUILDING_SHARED_LIBRARY
%.lo: AM_CXXFLAGS += -DBUILDING_SHARED_LIBRARY
%.o: AM_CXXFLAGS += -DUSING_SHARED_LIBRARY
else
%.lo: AM_CXXFLAGS += -DBUILDING_STATIC_LIBRARY
%.o: AM_CXXFLAGS += -DUSING_STATIC_LIBRARY
endif

这是GNU Make特有的,当然,我没有看到任何其他方法来做到这一点。请注意,Brett Hale在评论中提出的使用#ifdef PIC的解决方案至少在(交叉)编译MSW时不起作用,其中此符号从未定义过。

很奇怪libtool不允许为构建静态和共享对象定义单独的标志,例如在LT_INIT()中,因为这看起来像是使用正确的ELF可见性/ Windows DLL导出声明所非常需要的东西。