有没有办法在使用cmake的"target_link_libraries"时使用libtool的".la"文件?

9

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

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

1个回答

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 ()

但我真的非常鼓励您使用像PkgConfig这样更标准的东西,因为CMake原生支持它。或者更好的是,如果可用的话,使用库自己的find_package兼容配置包和其导入目标

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接