【问题标题】:Is there any way to use a libtool ".la" file with cmake "target_link_libraries"有什么方法可以使用带有 cmake “target_link_libraries” 的 libtool “.la” 文件
【发布时间】:2019-03-05 13:04:23
【问题描述】:

在将库集成到我的 cmake 项目中时,我一直在将库的 .la 文件中的“dependency_libs”复制粘贴到变量中,然后使用“target_link_library”。

我需要以某种方式直接从 .la 文件中获取这个“dependency_libs”变量。有没有办法在cmake中做到这一点?如果没有,我总是可以用其他语言编写脚本,用正则表达式解析文件,然后将其写入文件并将其导入变量。

【问题讨论】:

    标签: cmake libtool


    【解决方案1】:

    回答你的问题:

    # Assume libtool_file is set somewhere to your .la file.
    
    file(READ "${libtool_file}" contents)
    if (contents MATCHES "dependency_libs *= *'([^']*)'")
      string(STRIP "${CMAKE_MATCH_1}" deps)
      string(REGEX REPLACE " +" ";" deps "${deps}")
      target_link_libraries(my_target PRIVATE ${deps})
    else ()
      message(WARNING "${libtool_file} does not declare dependencies")
    endif ()
    

    但我真的REALLY鼓励你使用更标准的东西,比如PkgConfig,CMake 对此有原生支持。或者更好的是,库自己的find_package-兼容配置包及其imported targets(如果可用)。

    对于它的价值,我只能在我的系统上找到 一个,单个 .la 文件,其中包含一个依赖项。该文件是/usr/lib/x86_64-linux-gnu/libltdl.la,它包含对-ldl 的单一依赖(无论如何,可以通过${CMAKE_DL_LIBS} 更好地访问它)。

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多