c – 如何在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和(AFAIK)链接到.lib文件,没有一种直接的方法来确定它是静态库还是动态库.

点赞