在将一个库集成到我的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 ()
但我真的非常鼓励您使用像PkgConfig这样更标准的东西,因为CMake原生支持它。或者更好的是,如果可用的话,使用库自己的find_package
兼容配置包和其导入目标。
值得一提的是,在我的系统上,我只找到了一个单独的.la文件,其中包含一个依赖项。那个文件是/usr/lib/x86_64-linux-gnu/libltdl.la
,它包含一个对-ldl
的单个依赖项(无论如何,可以通过${CMAKE_DL_LIBS}
更好地访问它)。