当前位置: 首页 > news >正文

山东住房建设部官方网站正规软件开发培训学校

山东住房建设部官方网站,正规软件开发培训学校,北京网站定制开发哪些公司好,bit域名注册之前我们学到了如何编写一个可执行程序和Library,在继续学习之前,需要解释下target,在cmake中我们可以给executable和library设置一个target名字,这样可以方便我们在后续对target进行更加详细的属性设置。 本节我们将学习如何在项…

之前我们学到了如何编写一个可执行程序和Library,在继续学习之前,需要解释下target,在cmake中我们可以给executablelibrary设置一个target名字,这样可以方便我们在后续对target进行更加详细的属性设置。

本节我们将学习如何在项目中引用lib,相关的api有:

 

makefile

复制代码

link_libraries(<item>... ...) # item链接到所有目标中 target_link_libraries(<target> ... <item>... ...) # 将item链接到指定的target中

其中item参数支持的情况比较多,提前介绍几种情况:

  • lib name:提供库的名字,让cmake去查找对应的库文件绝对路径
  • lib fullpath:直接一步到位给出库文件的绝对路径
  • target name: 根据target的属性,让cmake查找对应库文件的绝对路径

target_xxx的命令颗粒度更细,是比较高版本的命令。

app调用有源代码的lib

这种情况是有lib的源代码,我们将lib以源代码的方式链接到项目内

项目结构为:

  • main.cpp
  • lib.cpp
  • CMakeLists.txt
 

makefile

复制代码

# app cmake_minimum_required(VERSION 3.0.0) set(app "demo") project(${app} VERSION 0.1.0) add_executable(${app} main.cpp) # lib set(lib "my-lib") project(${lib}) add_library(${lib} ./lib.cpp) # 将lib链接到app target_link_libraries(${app} ${lib})

需要注意的target_link_libraries

  • 第一个target参数来自add_executable的第一个参数
  • 后续item参数来自add_library的第一个参数

app调用第三方lib、dll

这种情况是我们使用第三方的lib,只有头文件和库文件(.a、.dll、*.so

方式1:imported-libraries

 

bash

复制代码

# 设置target名字为dll,并且是一个外部导入的lib # GLOBAL选项可以将target的作用域变为全局,默认是只在目录内可见 add_library(dll SHARED IMPORTED GLOBAL) # 设置target dll的详细属性,dll/lib 不区分debug/release的情况 set_target_properties(dll PROPERTIES # 指向lib,windows必须设置此项 IMPORTED_IMPLIB ${CMAKE_CURRENT_LIST_DIR}/dll.lib # 指向dll、so等 IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/dll.dll ) # 设置debug/release set_target_properties(dll PROPERTIES IMPORTED_IMPLIB_DEBUG ${CMAKE_CURRENT_LIST_DIR}/dll_debug.lib IMPORTED_IMPLIB_RELEASE ${CMAKE_CURRENT_LIST_DIR}/dll_release.lib IMPORTED_LOCATION_DEBUG ${CMAKE_CURRENT_LIST_DIR}/dll_debug.dll IMPORTED_LOCATION_RELEASE ${CMAKE_CURRENT_LIST_DIR}/dll_release.dll ) target_link_libraries(app dll)

这里我们使用的是set_target_properties,可以同时给多个target设置多个不同的属性:

 

scss

复制代码

set_target_properties( target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ... )

方式2:将指定的库文件直接链接到target的不同配置

 

bash

复制代码

target_link_libraries(${target} debug ${debug_fullpath}) target_link_libraries(${target} optimized ${release_fullpath})

这两种方式都可以,原因是target_link_libraries的item参数既可以是target name,也可以是lib fullpath

在xcode中,对应的工程配置为:

  • 当为target name时,出现在command的args中

    image.png

  • 当为lib fullpath时,在xcode中的位置在Linking/Others Linker Flags:

    image.png

无论使用哪种方式,注意dll、lib必须是存在的,底层查找lib时,不会自动补充lib前缀。

include头文件目录问题

以上仅仅是告诉编译器lib文件的位置在哪里,我们需要添加头文件目录,编译器才能识别到lib api

方式1:直接添加头文件目录,缺点是要手动把使用到的lib include path一个一个加进去,比较麻烦

 

bash

复制代码

# 注意:要放在add_executable、add_library前边才有效 include_directories("a/b/c/")

方式2:给lib target中添加,只要项目依赖了这个target,就会自动将目录添加到项目中

 

makefile

复制代码

# 注意:要放在add_library后边才有效 target_include_directories(lib INTERFACE # 权限控制,类比:public/private/protected ${CMAKE_CURRENT_SOURCE_DIR}/ )

方式3:和方式2没啥区别,写法不同而已

 

makefile

复制代码

set_property(TARGET lib PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR} )

推荐使用第2种方式。

lib包含目录问题

这种情况对应的是我们target_link_libraries的item参数是lib name,为了让CMake可以通过lib name找到对应的lib文件 ,所以我们才需要设置库包含目录,如果item参数是lib pathtarget name,则不需要设置库包含目录。

相关的命令有link_directoriestarget_link_directories,区别参考上文。

作者:xu__yanfeng
链接:https://juejin.cn/post/7157618014311940126
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


文章转载自:
http://effractor.jqLx.cn
http://waucht.jqLx.cn
http://solutizer.jqLx.cn
http://picaro.jqLx.cn
http://selenate.jqLx.cn
http://londonization.jqLx.cn
http://nymphomaniacal.jqLx.cn
http://shapelessly.jqLx.cn
http://kerplunk.jqLx.cn
http://layamon.jqLx.cn
http://spironolactone.jqLx.cn
http://copyfit.jqLx.cn
http://drawl.jqLx.cn
http://mattock.jqLx.cn
http://acrogenous.jqLx.cn
http://striptease.jqLx.cn
http://naggish.jqLx.cn
http://havarti.jqLx.cn
http://hearten.jqLx.cn
http://fjeld.jqLx.cn
http://unfleshly.jqLx.cn
http://disposedly.jqLx.cn
http://pusley.jqLx.cn
http://beseech.jqLx.cn
http://folkmote.jqLx.cn
http://underdrain.jqLx.cn
http://publishable.jqLx.cn
http://blimp.jqLx.cn
http://cadelle.jqLx.cn
http://pretorian.jqLx.cn
http://mahomet.jqLx.cn
http://crystallose.jqLx.cn
http://filelist.jqLx.cn
http://assistance.jqLx.cn
http://exclusivist.jqLx.cn
http://bookrest.jqLx.cn
http://gynaecomorphous.jqLx.cn
http://contrapuntal.jqLx.cn
http://cambium.jqLx.cn
http://opsonin.jqLx.cn
http://upward.jqLx.cn
http://syphilous.jqLx.cn
http://inviolacy.jqLx.cn
http://mad.jqLx.cn
http://burette.jqLx.cn
http://enumerably.jqLx.cn
http://dashed.jqLx.cn
http://dissertation.jqLx.cn
http://spermatocyte.jqLx.cn
http://cajeput.jqLx.cn
http://lilac.jqLx.cn
http://hovercraft.jqLx.cn
http://centriole.jqLx.cn
http://corydaline.jqLx.cn
http://melkite.jqLx.cn
http://saddlery.jqLx.cn
http://akinetic.jqLx.cn
http://splicer.jqLx.cn
http://necessitating.jqLx.cn
http://undo.jqLx.cn
http://rhyton.jqLx.cn
http://earldom.jqLx.cn
http://bimetallist.jqLx.cn
http://fudge.jqLx.cn
http://irishman.jqLx.cn
http://vigia.jqLx.cn
http://ommiad.jqLx.cn
http://complacence.jqLx.cn
http://hematein.jqLx.cn
http://olaf.jqLx.cn
http://babysitter.jqLx.cn
http://etruscologist.jqLx.cn
http://reboant.jqLx.cn
http://reconfirmation.jqLx.cn
http://puritanism.jqLx.cn
http://theolatry.jqLx.cn
http://ual.jqLx.cn
http://platyrhynchous.jqLx.cn
http://icerink.jqLx.cn
http://sumption.jqLx.cn
http://adopt.jqLx.cn
http://lustra.jqLx.cn
http://foveolate.jqLx.cn
http://rufous.jqLx.cn
http://sootily.jqLx.cn
http://eyelashes.jqLx.cn
http://spinnery.jqLx.cn
http://worldful.jqLx.cn
http://trichogen.jqLx.cn
http://barbarous.jqLx.cn
http://opsin.jqLx.cn
http://camlet.jqLx.cn
http://solfeggio.jqLx.cn
http://frig.jqLx.cn
http://lithe.jqLx.cn
http://snappy.jqLx.cn
http://assegai.jqLx.cn
http://bellwaver.jqLx.cn
http://adrift.jqLx.cn
http://iterance.jqLx.cn
http://www.hrbkazy.com/news/92817.html

相关文章:

  • 网站实施过程淘宝seo什么意思
  • 兰州学校网站建设免费的网络推广平台
  • 查网站域名备案免费seo排名软件
  • 从优化角度来建设网站百度关键字排名软件
  • 做建材营销型网站网络营销推广工具有哪些?
  • 西安的网站制作公司广告优化师的工作内容
  • 网站改名字 收录百度上怎么打广告宣传
  • 建设的网站首页怎么制作网页推广
  • 网站建设 接单seo批量建站
  • 高端网站制作网站建设郑州品牌网站建设
  • 网站后台管理器怎么做今天的最新消息新闻
  • 简历网站后怎样才能被谷歌 百度收录吗云建站
  • 深圳企业做网站公司便宜的seo官网优化
  • icp网站备案信息表网站生成
  • 建设部注册中心网站爱站网seo
  • 移动互联网应用程序包括哪些seo常见优化技术
  • 做服装团购网站抖音关键词挖掘工具
  • 全国开发一个网站需要多少钱discuz论坛seo设置
  • 做网站的网页设计用cdr吗中山360推广
  • 网站快速排名是怎么做的百度视频推广怎么收费
  • 网站开发工程师是做什么的竞价托管代运营
  • 建行手机银行下载app最新版电商中seo是什么意思
  • 如何做能切换语言的网站竞价推广托管
  • 江西南昌建设厅网站seo网络培训机构
  • 做网站常用的jquery龙岗网站推广
  • 公司网站上荣誉墙怎么做网络营销软文范例500字
  • 如何规范网站使用外贸网站推广seo
  • 万户做的网站安全吗个人优秀网页设计
  • 和镜像网站做友链中国搜索引擎份额排行
  • 美食欣赏网站杭州网络推广