【发布时间】:2019-03-05 13:04:23
【问题描述】:
在将库集成到我的 cmake 项目中时,我一直在将库的 .la 文件中的“dependency_libs”复制粘贴到变量中,然后使用“target_link_library”。
我需要以某种方式直接从 .la 文件中获取这个“dependency_libs”变量。有没有办法在cmake中做到这一点?如果没有,我总是可以用其他语言编写脚本,用正则表达式解析文件,然后将其写入文件并将其导入变量。
【问题讨论】:
在将库集成到我的 cmake 项目中时,我一直在将库的 .la 文件中的“dependency_libs”复制粘贴到变量中,然后使用“target_link_library”。
我需要以某种方式直接从 .la 文件中获取这个“dependency_libs”变量。有没有办法在cmake中做到这一点?如果没有,我总是可以用其他语言编写脚本,用正则表达式解析文件,然后将其写入文件并将其导入变量。
【问题讨论】:
回答你的问题:
# 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} 更好地访问它)。
【讨论】: