cmake引入第三方库的debug和release版本之Windows版本
概述
- 本文将介绍cmak引入第三方库debug和release不同配置。
Windows上,习惯将debug模式下生成的动态库名后缀添加D 以作和release区分。cmake创建一个项目A,A引入动态库B,cmake怎么配置A链接动态库B的debug和release对应的库呢 - 本文的教程是基于 这里, 如果没有看,我推荐你先看下,再阅读本文。
核心函数 target_link_libraries
就这一个核心函数,我通常使用它链接LIB。如下
add_executable(exam_lib ${exam_src})
# to link dynamic library
target_link_libraries(exam_calc ${PROJECT_NAME})
它还可以配置debug和release模式下的动态库。
核心代码
# -------------------------------------------------------------------------------------------
# 区分动态库的debug和release
target_link_libraries ( ${PROJECT_NAME} PRIVATE
debug ${calc_LIBRARY_debug}
optimized ${calc_LIBRARY_release} )
就这一句,是不是简单到爆炸。 其中。${calc_LIBRARY_debug} 是动态库debug模式下的绝对路径。 同理, ${calc_LIBRARY_release}是动态库release模式下的绝对路径。而他们的定义出现在 这里 提到的 findcalc.cmake文件中,
#指定库头文件所在路径
FIND_PATH(calc_INCLUDE_DIR icalc.h ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/include)
#指定库文件所在路径
FIND_LIBRARY(calc_LIBRARY_release calc.lib ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/lib/release)
FIND_LIBRARY(calc_LIBRARY_debug calcD.lib ${CMAKE_CURRENT_SOURCE_DIR}/ext/calc/lib/debug)
# 为了下游可以继续使用
set(calc_FOUND FALSE)
if (calc_INCLUDE_DIR AND calc_LIBRARY_release AND calc_LIBRARY_debug)
set(calc_FOUND TRUE)
endif()
上面使用find_package链接第三方库。
一个不完整例子
# 创建项目
add_library( ${PROJECT_NAME} SHARED ${book_src} ${book_header})
# -------------------------------------------------------------------------------------------
# 指定头文件搜索路径
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_include_directories(${PROJECT_NAME} PRIVATE ${calc_INCLUDE_DIR})
# -------------------------------------------------------------------------------------------
# 区分动态库的debug和release
target_link_libraries ( ${PROJECT_NAME} PRIVATE
debug ${calc_LIBRARY_debug}
optimized ${calc_LIBRARY_release} )
cmake引入第三方库的debug和release版本之Windows版本的更多相关文章
- vue-cli创建的项目中引入第三方库报错 'caller', 'calle', and 'arguments' properties may not be...
http://blog.csdn.net/sophie_u/article/details/76223978 以在vue中引入mui第三方库为例: 虽然针对vue,有单独的vue-mui库可以使用,但 ...
- Swift项目引入第三方库的方法
以下,将创建一个Swift项目,然后引入3个库: Snappy 简化autolayout代码的库 Alamofire HTTP网络库,AFNetworking作者写的 SDWebImage 图片加载, ...
- 基于webpack实现多html页面开发框架七 引入第三方库如jquery
一.解决什么问题 1.如何引入第三方库,如jquery等 二.引入jquery方法 1.下载jquery.min.js放到assets/lib下面 2.安装copy-webpack-plugin,将已 ...
- vue-cli创建的项目中引入第三方库报错'caller', 'calle', and 'arguments' properties may not be...
本文链接:https://blog.csdn.net/Sophie_U/article/details/76223978 问题: 在vue的main.js中引入mui.min.js时,报错. 如上,单 ...
- iOS-启动项目(二)引入第三方库
摘要 项目中很大几率会用到第三方库,通过 Pod 方式引入第三方库是效率很高的方式,这里介绍一个新的项目搭建 Pod 方式的环境,方便项目中引入第三方库文件. 刚创建的项目中如果需要用到第三方库,常用 ...
- cmake引入三方库
目录结构 . |-- cmake | |-- CompilerSettings.cmake | |-- Options.cmake | `-- ProjectJsonCpp.cmake |-- CMa ...
- iOS真机调试引入第三方库(如友盟等)编译时候,出现错误提示
用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: MARK:解决方法:在building Setting 中设置bitCode ...
- ios 引入第三方库 运行时找不到函数实现
今天引入webtrends 这个库,结果一直运行时找不到函数,纳闷了一下午! 后来发现,是other flag没有设置对,对于那些包含category用来扩展ios原始类型的库,链接的时候需要特别的链 ...
- 【VS开发】MFC运行时库与debug、release版本之间的配置关系
参考内容: 前段时间从网上下来一个有意思的代码,用VS2010打开时需要将工程转换为2010的工程,转化后却出现了编译不通过的问题,类似这样的错误:c:\program files\microsoft ...
随机推荐
- Codeforces 453E - Little Pony and Lord Tirek(二维线段树+ODT)
Codeforces 题目传送门 & 洛谷题目传送门 一道难度 *3100 的 DS,而且被我自己搞出来了! 不过我终究还是技不如人,因为这是一个 \(n\log^2n\) + 大常数的辣鸡做 ...
- WPS for Linux 字体配置(字体缺失解决办法)
WPS for Linux 字体配置(字体缺失解决办法) 1. 背景 有些linux装完wps后提示"部分字体无法显示"或"some formula symbols mi ...
- python-django-分页处理
每个模型都有一个管理器,Manager 通过分页可以先加载一部分的数据内容,然后避免大量的查询带来的等待时间 应用场景是,排行榜,前十条或者 for i in range(100): ...: ... ...
- window10快捷键 + 浏览器常用通用快捷键
一.window10快捷键 1.win+tab 缩小版的显示出桌面打开的所有窗口,然后再结合上下左右键加enter选择想要的窗口: 如果不想选择或者保留原有显示窗口,再按win+tab 或者 ...
- C#集合Dictionary中按值的排序
C#集合Dictionary中按值的降序排列 static void Main(string[] args) { Dictionary<string, int> d ...
- xmake v2.6.1 发布,使用 Lua5.4 运行时,Rust 和 C++ 混合编译支持
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...
- Python3的类注意事项
参考: https://www.runoob.com/python/python-object.html https://www.runoob.com/w3cnote/python-extends-i ...
- JavaIO——内存操作流、打印流
我们之前所做的都是对文件进行IO处理,实则我们也可以对内存进行IO处理.我们将发生在内存中的IO处理称为内存流. 内存操作流也可分为两类:字节内存流和字符内存流. (1)ByteArrayInputS ...
- nexus 私服 拉不了 jar 包,报 Not authorized
问题: 无法下载导入jar包,idea reload 时 报: Could not transfer artifact com.xxx:parent:pom:1.0-SNAPSHOT from/to ...
- Web系统与自控系统数据通讯架构 之 OPC DA DataChangeEventHandler 非热点数据更新策略 ,
在使用OPC 采集 工控数据时,在DA模式下.采集数据通常用到 DataChangeEventHandler这个事件.但有时会遇到一些问题,就是当数据不变化时时不会触发 DataChange 这个事件 ...