【问题标题】:Automake: building shared module which is not to be installedAutomake:构建不安装的共享模块
【发布时间】:2011-11-26 09:27:59
【问题描述】:

如何告诉 Automake 构建一个不需要安装的动态模块?

pkglib_LTLIBRARIES = mywrapper.la
mywrapper_la_LDFLAGS = -no-undefined -module -avoid-version

导致 mywrapper.so 安装到 pkglibdir

noinst_LTLIBRARIES = mywrapper.la
mywrapper_la_LDFLAGS = -no-undefined -module -avoid-version

导致 static 便利库被构建。

有问题的动态模块仅用于运行测试套件,因此不会分发。

【问题讨论】:

    标签: automake libtool


    【解决方案1】:

    我遇到了同样的问题。这就是我所做的,包括对自己的愤怒评论以供将来参考:

    # The rpath is necessary because stoopid libtool won't build a shared library
    # if it's noinst_, because what POSSIBLE reason could you have to do that?
    TEST_PLUGIN_LIBTOOL_FLAGS = \
        -module \
        -shared \
        -avoid-version \
        -export-symbols-regex "<whatever symbols you need to export>" \
        -rpath $(abs_builddir)
    
    noinst_LTLIBRARIES = mywrapper.la
    mywrapper_la_LDFLAGS = $(TEST_PLUGIN_LIBTOOL_FLAGS)
    

    【讨论】:

      【解决方案2】:

      您可以使用check_LTLIBRARIES 用于测试目标。根据Automake的Uniform Naming Scheme

      特殊前缀“check_”表示有问题的对象 在运行“make check”命令之前不应构建。那些 对象也没有安装。

      它还默认生成一个静态库。我设法像这样强迫它:

      check_LTLIBRARIES = mywrapper.la
      mywrapper_la_LDFLAGS = -no-undefined -module -shared -avoid-version -rpath /tmp
      

      您还可以编译和运行测试套件可执行文件。

      check_PROGRAMS = suite
      
      suite_SOURCES = ...
      suite_LDFLAGS = ...
      suite_LDADD = ...
      
      check-local:
          ./suite
      

      【讨论】:

      • 如果这可行,那么它可能是一个很好的解决方案。你知道有没有check_PROGRAMS吗?还是我们使用noinst_PROGRAMS
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多