在我的CMake脚本中,我需要指定不同的库,我的项目是否链接,gcc的不同类型的链接。众所周知,使用-Wl,-Bstatic
和-Wl,-Bdynamic
选项进行此类混合。但是有可能在cmake脚本中以某种方式指定它吗?
答案 0 :(得分:2)
我们使用一些宏来调整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()
然后,我们会在调用prefer_static()
或prefer_dynamic()
之前调用相应的find_library(...)
或find_package(...)
例程。当静态库不可用时,这具有“退回”共享库的优点,反之亦然。
这不适用于Windows版本,因为您始终使用Visual Studio和(AFAIK)链接到.lib
文件,没有一种简单的方法可以确定它是静态库还是动态库。
答案 1 :(得分:0)
在CMake find_library
中可以用于此目的。
find_library(VAR libMyLib.a)
或SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)