代码之家  ›  专栏  ›  技术社区  ›  173210

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

  •  3
  • 173210  · 技术社区  · 9 年前

    我的项目使用自动工具,包含一个库和一个使用该库的程序。我想知道它是否配置为构建共享库以相应地更改程序的编译选项。生成文件。am应该是这样的:

    if BUILDING_SHARED_LIBRARY
    my_program_CFLAGS += -DBUILDING_SHARED_LIBRARY
    endif
    

    我如何才能做到这一点?

    3 回复  |  直到 9 年前
        1
  •  2
  •   ldav1s    9 年前

    因此:

    AM_CONDITIONAL([BUILDING_SHARED_LIBRARY], [test "x$enable_shared" = xyes])
    

    在中不起作用 configure.ac ? libtool 自愿为构建共享库设置一些编译器标志。

        2
  •  1
  •   173210    9 年前

    我已经阅读了源代码,发现没有用于的接口 Makefile.am . configure 将把配置直接写入 libtool 而且它不会暴露于automake。

        3
  •  0
  •   VZ.    8 年前

    我找到的最佳解决方案基于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
    

    这是GNUMake,当然,我看不出其他方法可以做到这一点。请注意,Brett Hale在评论中提出的解决方案 #ifdef PIC ,至少在MSW(交叉)编译时不起作用,因为MSW从未定义此符号。

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