如何在CMake中指定链接类型
How to specify the linking type in 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链接到.lib
文件,并且(AFAIK)没有直接的方法来确定它是静态库还是动态库。
在CMake中find_library
可以用于此目的。
find_library(VAR libMyLib.a)
OR SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") find_library(VAR MyLib)
相关文章:
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 使用 trie 数据结构链接不同类型的信息
- 无法创建类型为无序链接列表的对象
- 解析参数值 - 字符串和链接值(类型字符串的链接值)与(特定类型的)变量
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 如何将不同类型的节点存储在一个链接列表中
- 将模板类与引用非类型模板参数一起使用时出现链接器错误
- 类类型的静态constexpr字段在g++中给出链接时间错误
- 如何使用同一链接列表一次处理各种类型的节点
- 链接时错误地折叠了LLVM IR类型(C++API)
- C++11中具有C链接的复杂类型
- 为什么对非类型模板参数的引用需要外部链接
- 链接列表中的虚函数 - 多种返回类型(对象)
- 为什么我的链接数据类型复制构造函数不起作用?
- 为什么我得到的声明没有类型错误链接列表
- 如何为链接列表节点定义一个以指针为模板类型的模板类
- 无效使用不完整的类型(链接的模板类)
- 警告LNK4206:找不到预编译类型信息; 未链接或覆盖;链接对象,就好像没有调试信息一样
- 类型是否只有内部/外部链接以外的"链接"?
- 如何在CMake中指定链接类型