如何在CMake中指定链接类型?

时间:2013-05-04 21:02:07

标签: c++ gcc cmake

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

2 个答案:

答案 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)