4

在我的 CMake 脚本中,我需要为我的项目链接的不同库指定 gcc 的不同链接类型。-Wl,-Bstatic这种混合的使用和-Wl,-Bdynamic选择是众所周知的。但是是否可以在 cmake 脚本中以某种方式指定它?

4

2 回答 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 回答