当前位置: 首页 > Linux

CMake学习3-精进

时间:2023-04-06 18:23:25 Linux

一、内容概述本文主要以实际案例为主。详细语法参考《CMake学习1 - 初出茅庐》,构造方法参考《CMake学习2 - 小试牛刀》。通过四个案例来讲解静态库和共享库的创建和调用方法。单共享库项目单静态库项目使用共享库,静态库使用pkg-config库2.单共享库项目2.1项目描述建立一个名为“Math”的共享库,通过add_library命令将产品构建为“libMath.so”“SHARED”关键字表示构建共享库支持通过makeinstall命令将该库安装到standardlibrary2.2工程结构中。├──CMakeLists.txt├──include│└──math│└──math.h└──math.cpp2.3文件内容CMakeLists.txt#构建项目所需的最低cmake版本cmake_minimum_required(VERSION3.1)#指定项目名称(输出libMath.so)project(Math)#创建静态库(需要包含所有cpp文件)add_library(${PROJECT_NAME}SHAREDmath.cpp)#包含需要的头文件所在目录项目位于target_include_directories(${PROJECT_NAME}PUBLIC${PROJECT_SOURCE_DIR}/include)#安装头文件install(DIRECTORY"${PROJECT_SOURCE_DIR}/include/"DESTINATION"/usr/local/include")#安装库文件install(目标${PROJECT_NAME}DESTINATION/usr/local/lib)math.h#pragmaoncedoubleadd(doublea,doubleb);doublesub(doublea,doubleb);doublemul(doublea,doubleb);doublediv(doublea,doubleb);math.c#includedoubleadd(doublea,doubleb){returna+b;}doublesub(doublea,doubleb){返回a-b;}doublemul(doublea,doubleb){returna*b;}doublediv(doublea,doubleb){returna/b;}3.单静态库项目3.1项目描述》静态库构建产品为“libUi.a”,通过add_library命令指定了“STATIC”关键字,表示构建静态库支持通过makeinstall命令将该库安装到标准库中。注意头文件组织include文件夹格式,采用标准用法3.2项目结构。├──button.cpp├──CMakeLists.txt├──edit.cpp└──include└──ui├──button.h├──edit.h└──element.hpp3.3文件内容CMakeLists。txt#构建项目所需的最低cmake版本cmake_minimum_required(VERSION3.1)#指定项目名称(输出libUi.so)project(Ui)#创建共享库(需要包含所有cpp文件)add_library(${PROJECT_NAME}STATICbutton.cppedit.cpp)#包含工程需要的头文件所在目录target_include_directories(${PROJECT_NAME}PUBLIC${PROJECT_SOURCE_DIR}/include)#安装头文件install(DIRECTORY"${PROJECT_SOURCE_DIR}/include/"DESTINATION"/usr/local/include")#安装库文件install(TARGETS${PROJECT_NAME}DESTINATION/usr/local/lib)element.hpp#pragmaonce#includeusingnamespacestd;classUiElement{public:virtualvoidshow()=0;virtualvoidclick()=0;};button.h#include"element.hpp"classButton:publicUiElement{public:virtualvoidshow()overridefinal;virtualvoidclick()overridefinal;};edit.h#include"element.hpp"类编辑:publicUiElement{public:virtualvoidshow()overridefinal;virtualvoidclick()overridefinal;};button.cpp#includevoidButton::show(){cout<<"Button::show()已调用。"<voidEdit::show(){cout<<"Edit::show()已调用。"<#include#include#includeintmain(intargc,char*argv[]){std::cout<<"演示如何使用数学库:“<=1.8gstreamer-app-1.0>=1.8)#引用gstreamer头文件target_include_directories(${PROJECT_NAME}PUBLIC${GST_INCLUDE_DIRS})#链接gstreamer库文件GstBus*总线;GstMessage*味精;/*初始化GStreamer*/gst_init(&argc,&argv);/*构建管道*/pipeline=gst_parse_launch("playbinuri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",NULL);/*开始播放*/gst_element_set_state(pipeline,GST_STATE_PLAYING);/*等到错误或EOS*/bus=gst_element_get_bus(管道);msg=gst_bus_timed_pop_filtered(bus,GST_CLOCK_TIME_NONE,GST_MESSAGE_ERROR|GST_MESSAGE_EOS);/*释放资源*/if(msg!=NULL)gst_message_unref(msg);gst_object_unref(总线);gst_element_set_state(管道,GST_STATE_NULL);gst_object_unref(管道);return0;}六、参考链接GStreamer基础教程1:世界,您好!