PT0092_Linux下C++开发(四)-----计算机学习实战ppt课件

上传人:29 文档编号:244557197 上传时间:2024-10-05 格式:PPTX 页数:15 大小:198.73KB
返回 下载 相关 举报
PT0092_Linux下C++开发(四)-----计算机学习实战ppt课件_第1页
第1页 / 共15页
PT0092_Linux下C++开发(四)-----计算机学习实战ppt课件_第2页
第2页 / 共15页
PT0092_Linux下C++开发(四)-----计算机学习实战ppt课件_第3页
第3页 / 共15页
点击查看更多>>
资源描述
,Linux,下,C+,开发,(四)动、静态库,与,安装操作,本系列,Linux,下的,C+,开发,主要分为两大部分,第一部分讲解,Linux,下,C+,的开发流程及一些基础知识,第二部分讲解,Cmake,的使用,初步计划如下:,1,,,Linux,下,C+,的开发流程及基础知识介绍,2,,,cmake,简述及,CMakeLists,基本语句语法,3,,多目录工程,4,,动,静态库及安装操作,5,,模块的使用及自定义模块,6,,,Linux,下各种,IDE,介绍和对比,今天主要给大家介绍的就是第二部分的第三节:,动、静态库及安装操作,安装,操作,这里讲到的安装操作类似一种自动化的复制,我们首先看一下本次项目的结构,将工程项目中的各种类型的文件安装到指定的目录中去,将,cmake/3/,COPYRIGHT,安装到,cmake/install_dir/doc,将,cmake/3/,README,安装到,cmake/install_dir/doc,将,cmake/3/doc,/,hello.txt,安装到,cmake/install_dir/doc,将,cmake/3/,runhello.sh,安装,到,cmake/install_dir/bin,将输出的,二进制文件,也安装到,cmake/install_dir/bin,安装,操作,接下来看如何在,CMakeLists.txt,中具体实现这些步骤,cmake_minimum_required(VERSION,2.6,),PROJECT,(demo3,),MESSAGE,(,STATUS,This is BINARY dir$,demo3_BINARY_DIR,),MESSAGE,(,STATUS,This is SOURCE dir$,demo3_SOURCE_DIR,),#,add executable file,ADD_SUBDIRECTORY,(./src),#set CMAKE_INSTALL_PREFIX,SET,(CMAKE_INSTALL_PREFIX,/home/liqi/workspace/cmake/install_dir,),MESSAGE,(,STATUS,CMAKE_INSTALL_PREFIX=$,CMAKE_INSTALL_PREFIX,),#install some files,INSTALL,(,PROGRAMS,runhello.sh,DESTINATION,bin),INSTALL,(,DIRECTORY,doc/,DESTINATION,doc),INSTAL,L(,FILES,COPYRIGHT README,DESTINATION,doc),主目录的,CMakeLists.txt,ADD_EXECUTABLE,(hello,hello.c,),#,set output path,SET,(EXECUTABLE_OUTPUT_PATH$,CMAKE_BINARY_DIR,/bin),#MESSAGE($EXECUTABLE_OUTPUT_PATH,),INSTALL,(,TARGETS,hello,RUNTIME DESTINATION,bin),s,rc,目录下的,CMakeLists.txt,安装,操作,CMAKE_INSTALL_PREFIX,变量,CMAKE_INSTALL_PREFIX,变量类似于,configure,脚本的,prefix,常见,的使用方法看 起来是这个样子:,cmake-DCMAKE_INSTALL_PREFIX=/usr,.,如果没有额外定义,那么,CMAKE_INSTALL_PREFIX,变量默认为,/,usr/local,DESTINATION,定义了安装的,路径,如果,路径以,/,开头,那么指的是绝对路径,这时候,CMAKE_INSTALL_PREFIX,其实就无效,了,如果,你希望使用,CMAKE_INSTALL_PREFIX,来 定义安装路径,就要写成相对路径,即不要以,/,开头,那么,安装后的路径就是,$CMAKE_INSTALL_PREFIX/,安装,操作,INSTALL(TARGETS,targets.,ARCHIVE|LIBRARY|RUNTIME,DESTINATION,PERMISSIONS,permissions.,CONFIGURATIONS,Debug|Release,|.,COMPONENT,OPTIONAL,.),参数,中的,TARGETS,后面跟的就是我们通过,ADD_EXECUTABLE,或者,ADD_LIBRARY,定义的 目标文件,可能是静态,库、动态,库,、可执行二进制,INSTALL(FILES files.,DESTINATION,PERMISSION permissions,.,CONFIGURATIONS,Debug|Release|.,COMPONENT,RENAME,OPTIONAL),可用,于安装一般文件,并可以指定访问权限,文件名是此指令所在,路,安装,操作,INSTALL(PROGRAMS files.DESTINATION,PERMISSIONS permissions.,CONFIGURATIONS Debug|Release|.,COMPONENT,RENAME OPTIONAL),非目标文件的可执行程序安装,(,比如脚本之类,),安装,后权限为,:,OWNER_EXECUTE,GROUP_EXECUTE,和,WORLD_EXECUTE,,即,755,权限,INSTALL(DIRECTORY dirs.DESTINATION,FILE_PERMISSIONS permissions.,DIRECTORY_PERMISSIONS permissions,.,USE_SOURCE_PERMISSIONS,CONFIGURATIONS Debug|Release,|.,COMPONENT,PATTERN|REGEX,EXCLUDE PERMISSIONS permissions.,.),PATTERN,用于,使用表达式,进行,过滤,PERMISSIONS,用于指定,PATTERN,过滤后的文件 权限。,INSTALL(SCRIPT CODE .),SCRIPT,参数用于在安装时调用,cmake,脚本文件(也就是,.cmake,文件),CODE,参数用于执行,CMAKE,指令,必须以双引号括起来,。比如,:,INSTALL(CODE MESSAGE(Sample install message.),动、静态库,动态库:,动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存,在,静态库:,静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态,库,本次示例工程文件结构如左图所示,hello.c,与,hello.h,将被用来生成,动态库和静态库,并且将生成的库文件放到下面,lib,文件夹中,#cmake version,cmake_minimum_required(VERSION 2.8.3),#project name,PROJECT,(demo4),#add subdirectory,ADD_SUBDIRECTORY,(library),#set prefix,SET,(,CMAKE_INSTALL_PREFIX,/home/liqi/workspace/cmake/install_dir),MESSAGE,(,STATUS,CMAKE_INSTALL_PREFIX=$,CMAKE_INSTALL_PREFIX,),主目录下的,CMakeLists.txt,#set source variable,SET,(LIBHELLO_SRC hello.c),#add executable,#ADD_EXECUTABLE(demo4 hello.h,hello.c),#set output path,SET,(LIBRARY_OUTPUT_PATH$,PROJECT_BINARY_DIR,/lib),#SET(EXECUTABLE_OUTPUT_PATH$PROJECT_BINARY_DIR/bin),#add,library,ADD_LIBRARY,(hello,SHARED,$,LIBHELLO_SRC,),ADD_LIBRARY,(hello_static,STATIC,$,LIBHELLO_SRC,),#change static library property,SET_TARGET_PROPERTIES,(hello_static,PROPERTIES,OUTPUT_NAME,hello),#change CLEAN_DIRECT_OUPUT properties,SET_TARGET_PROPERTIES,(hello,PROPERTIES,CLEAN_DIRECT_OUTPUT 1),SET_TARGET_PROPERTIES,(hello_static,PROPERTIES,CLEAN_DIRECT_OUTPUT 1),#add shared library version number,SET_TARGET_PROPERTIES,(hello,PROPERTIES,VERSION 1.2 SOVERSION 1),#install libraries,INSTALL,(,TARGETS,hello hello_static,LIBRARY DESTINATION,lib,ARCHIVE DESTINATION,lib),#install include file,INSTALL,(,FILES,hello.h,DESTINATION,include),library,目录下的,CMakeLists.txt,ADD_LIBRARY(libname,SHARED|STATIC|MODULE,EXCLUDE_FROM_ALL,source1 source2.sourceN,),SHARED,动态库,STATIC,静态,库,MODULE,在,使用,dyld,的系统有效,如果不支持,dyld,,则被当作,SHARED,对待,EXCLUDE_FROM_ALL,参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手 工,构建,GET_TARGET_PROPERTY(VAR target property),GET_TARGET_PROPERTY,(,OUTPUT_VALUE,hello_static,OUTPUT_NAME,),MESSAGE,(,STATUS,“This is the hello_static OUTPUT_NAME:”,$,OUTPUT_VALUE,),如果没有这个属性定义,则返回,NOTFOUND,SET_TARGET_PROPERTIES(target1,target2.,PROPERTIES prop1,value1,prop2 value2,.),这条指令可以用来设置输出的名称,对于动态,库还,可以用来指定动态库版本和,API,版本,例如:,SET_TARGET_PROPERTIES,(hello_static,PROPERTIES OUTPUT_NAME,hello,),SET_TARGET_PROPERTIES,(hello,PROPERTIES,CLEAN_DIRECT_OUTPUT,1),SET_TARGET_PROPERTIES,(hello_static,PROPERTIES,CLEAN_DIRECT_OUTPUT,1),SET_TARGET_PROPERTIES,(hello,PROPERTIES,VERSION,1.2,SOVERSION,1,),VERSION,指代动态库版本,,SOVERSION,指代,API,版本,D,ynamic,L,ink,L,ibrary,“Dll hell”,动态,库新版本覆盖旧版本,但是却不兼容老,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!