有什么方法可以将libtool“.la”文件与cmake“target_link_libraries”一起使用

use*_*069 8 cmake libtool

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

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

Ale*_*ing 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 ()
Run Code Online (Sandbox Code Playgroud)

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

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