如何在 CMake 中指定链接类型?
Posted
技术标签:
【中文标题】如何在 CMake 中指定链接类型?【英文标题】:How to specify the linking type in CMake? 【发布时间】:2013-05-04 21:02:06 【问题描述】:在我的 CMake 脚本中,我需要为我的项目所链接的不同库指定 gcc 的不同链接类型。众所周知,使用-Wl,-Bstatic
和-Wl,-Bdynamic
选项进行此类混合。但是可以在 cmake 脚本中以某种方式指定吗?
【问题讨论】:
【参考方案1】:我们使用几个宏来调整 CMake 在 Linux/MacOSX 上的首选搜索顺序,以便在动态链接库和静态链接库之间切换
macro( prefer_static )
if( NOT WIN32 )
list( REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
list( INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 ".a" )
endif()
endmacro()
macro( prefer_dynamic )
if( NOT WIN32 )
list( REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
list( APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".a" )
endif()
endmacro()
然后我们在调用find_library(...)
或find_package(...)
之前调用适当的prefer_static()
或prefer_dynamic()
例程。这具有在静态库不可用时“退回”共享库的优势,反之亦然。
这不适用于 Windows 构建,因为您总是使用 Visual Studio 链接到 .lib
文件,并且 (AFAIK) 没有直接的方法来确定它是静态库还是动态库。
【讨论】:
您也可以增强宏以在用户定义路径中查找库!很好的逻辑。【参考方案2】:在 CMake 中 find_library
可用于此目的。
find_library(VAR libMyLib.a)
或 SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)
【讨论】:
以上是关于如何在 CMake 中指定链接类型?的主要内容,如果未能解决你的问题,请参考以下文章