【发布时间】:2013-05-04 21:02:06
【问题描述】:
在我的 CMake 脚本中,我需要为我的项目所链接的不同库指定 gcc 的不同链接类型。众所周知,使用-Wl,-Bstatic 和-Wl,-Bdynamic 选项进行此类混合。但是可以在 cmake 脚本中以某种方式指定吗?
【问题讨论】:
在我的 CMake 脚本中,我需要为我的项目所链接的不同库指定 gcc 的不同链接类型。众所周知,使用-Wl,-Bstatic 和-Wl,-Bdynamic 选项进行此类混合。但是可以在 cmake 脚本中以某种方式指定吗?
【问题讨论】:
我们使用几个宏来调整 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) 没有直接的方法来确定它是静态库还是动态库。
【讨论】:
在 CMake 中 find_library 可用于此目的。
find_library(VAR libMyLib.a) 或 SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)
【讨论】: