在我的 CMake 脚本中,我需要为我的项目链接的不同库指定 gcc 的不同链接类型。-Wl,-Bstatic
这种混合的使用和-Wl,-Bdynamic
选择是众所周知的。但是是否可以在 cmake 脚本中以某种方式指定它?
问问题
619 次
2 回答
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()
然后我们在调用or之前调用适当的prefer_static()
or例程。这具有在静态库不可用时“退回”共享库的优势,反之亦然。prefer_dynamic()
find_library(...)
find_package(...)
这不适用于 Windows 构建,因为您始终.lib
使用 Visual Studio 链接到文件,并且 (AFAIK) 没有直接的方法来确定它是静态库还是动态库。
于 2013-05-09T10:36:04.213 回答
0
在 CMakefind_library
中可以用于此目的。
find_library(VAR libMyLib.a)
或者SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)
于 2013-05-09T10:24:47.007 回答