CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

在这里插入图片描述

—— 杭州 2024-03-20 凌晨1:06


在这里插入图片描述

code review!

文章目录

  • CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板
    • 1.通用CMakeLists.txt模板
    • 2.GPT4给出的改进建议
    • 3.git clone或apt-get install的官方库,以zlib库为例
      • 3.1.获取zlib库
      • 3.2.找到头文件和库文件的位置并拷贝至工程项目
      • 3.3.CMakeLists.txt
      • 3.4.此时的文件结构
      • 3.5.main.cpp
      • 3.6.编译运行
    • 4.简单地将克隆的git clone下的目录放在项目树中的某个位置,以Google Test为例
      • 4.1.git clone
      • 4.2.CMakeLists.txt
      • 4.3.main.cpp
      • 4.4.编译运行
    • 5.在CMakeLists.txt文件中执行git clone(略,个人没用过,但知道有这个方法)
    • 6.找到该库的头文件(用于编译时包含)和链接库(用于链接时使用)的方法
    • 7.包含可执行文件的库,如protobuf移植到自己的项目文件夹中
      • 7.1.找到可执行文件和lib文件夹的路径
      • 7.2.创建third_party目录
      • 7.3.拷贝相关文件
      • 7.4.文件结构
      • 7.5.CMakeLists.txt
      • 7.6.main.cpp
      • 7.7.hello.proto
      • 7.8.编译运行
      • 7.9.在build文件夹内可以找到编译出来的pb.cc和pb.h

1.通用CMakeLists.txt模板

在这里插入图片描述

代码

# 设置CMake的最低版本要求
cmake_minimum_required(VERSION 3.0)# 设置项目名称和版本
project(MyProject)# 设置C++标准
set(CMAKE_CXX_STANDARD 11)# 假设你的库文件名为libmylibrary.a (静态库) 或 libmylibrary.so (动态库)
# 并且库文件位于项目的third_party目录下# 添加自己的库的头文件目录
include_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/include)# 添加自己的库的库目录
link_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/lib)# 指定生成目标
add_executable(${PROJECT_NAME} src/main.cpp)# 链接库到你的可执行文件
target_link_libraries(${PROJECT_NAME} mylibrary)

2.GPT4给出的改进建议

这个CMakeLists.txt文件看上去基本是正确的,但是有几个小地方可能需要根据具体情况进行调整。以下是一个加了注释和可能需要注意的地方的版本:

# 设置CMake的最低版本要求
cmake_minimum_required(VERSION 3.0)# 设置项目名称和版本
project(MyProject VERSION 1.0.0) # 如果你需要指定版本号,应该这样设置# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True) # 确保使用了C++11# 假设你的库文件名为libmylibrary.a (静态库) 或 libmylibrary.so (动态库)
# 并且库文件位于项目的third_party目录下# 添加自己的库的头文件目录
include_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/include)# 添加自己的库的库目录
# 注意: 在现代CMake中,更推荐使用target_link_directories和target_link_libraries结合使用
# link_directories应该尽量避免使用,因为它是全局的,会影响所有的target
link_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/lib)# 指定生成目标
add_executable(${PROJECT_NAME} src/main.cpp)# 链接库到你的可执行文件
# 如果mylibrary是第三方库,且你没有使用add_subdirectory或find_package来包含它,
# 你可能需要使用find_library来查找库文件的确切位置
target_link_libraries(${PROJECT_NAME} mylibrary)

注意事项:

  1. 如果你有多个版本的mylibrary库,并且希望确保链接到正确的版本,可能需要更详细地指定库文件的路径或版本。
  2. 如果mylibrary是动态链接库,确保在运行时它可以在系统的库路径中找到,或者设置LD_LIBRARY_PATH环境变量等。
  3. 如果是跨平台项目,一些路径可能需要根据操作系统进行调整,例如使用CMAKE_PREFIX_PATH
  4. 现代CMake推荐使用target-specific命令如target_include_directoriestarge

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为综合案例-普通WLAN全覆盖配置(2)

组网图 结果验证 在AC_1和AC_2上执行display ap all命令,检查当前AP的状态,显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…

wireshark抓tcp包使用指南

本博文源于笔者不断探索加上去网络总结获得的经验,撰写wireshark如何抓tcp包 文章目录 1、打开wireshark2、选择网络源3、搜索ip地址与tcp条件4、看灰色的条纹 1、打开wireshark 2、选择网络源 选择自己当前的ip地址适用于的网络源,比如这里选择“以太…

ideaSSM 高校公寓交流员管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 高校公寓交流管理系统是一套完善的信息管理系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库&…

get_local_ip.bat:快速获取IPv4地址

批处理脚本,用于在Windows命令提示符下获取本地计算机的IPv4地址。 echo off ipconfig | findstr IPv4 pause - echo off:这会关闭命令提示符窗口中的命令回显,使得在运行脚本时不会显示每条命令的执行结果。 - ipconfig:这是一…

ELK快速搭建图文详细步骤

目录 一、下载地址二、安装docker-compose(已安装则跳过)三、初始化ELK1. 赋予/setup/entrypoint.sh执行权限2. 初始化 docker-elk 所需的 Elasticsearch 用户和组3. 重置默认用户的密码4. 替换配置文件中的用户名和密码5. 重启 Logstash 和 Kibana,使用新密码重新连…

鲁棒的基于表面势的GaN HEMT集成电路紧凑模型

来源:Robust Surface-Potential-Based Compact Model forGaN HEMT IC Design(TED 13年) 摘要 我们提出了一种精确且稳健的基于表面势的紧凑模型,用于模拟采用氮化镓高电子迁移率晶体管(GaN HEMT)设计的电…

关于vuex 的模块开发和使用

1、文件结构 2、modules 文件内容 例子: ccc.js 文件内容如下: // 基础配置项 const state {aa: [] }const mutations {setaa (state, data) {state.aa data} }const actions {} export default {namespaced: true, state,mutations,actions } **注…

高效编写产品规格书的秘诀与注意事项

高效编写产品规格书的秘诀:学会利用简单的工具,写出效果最佳的产品规格书。比如,你可以使用HelpLook、Markdown编辑器、LaTeX、notion等。 在快节奏的商业环境中,产品规格书是企业向市场展示产品特性和优势的重要工具。一份清晰、…

quartz整合前端vue加后端springboot

因工作需求&#xff0c;需要能修改定时的任务&#xff0c;前端vue3&#xff0c;后端是springboot 看看页面效果&#xff1a; 首先maven加上引入 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><versi…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁&#xff1f; 是的。 功率电压*电流。 随着功率增大&#xff0c;电压不变&#xff0c;电流增大&#xff0c;发热量增大&#xff0c;可能会烧毁。 今天给大家推荐一款650w的电脑电源&#xff0c;不过在推荐之前&#xff0c;首先要确认自己的电脑功耗…

串行通信接口之RS232、RS485与RS422

前言 RS232&#xff0c;RS485&#xff0c;RS422都是串口通信协议家族的一员&#xff0c;那么他们有什么区别呢&#xff1f;首先让我们来了解俩个简单的知识点&#xff0c;TTL电平以及CMOS电平&#xff0c;单端传输以及差分传输。 TTL电平 TTL电平接口电路由晶体管构成&#x…

Oracle19C静默安装教程

文章目录 一、安装前的准备1、安装Linux操作系统2、配置网络源或者本地源3、hosts文件配置 二、准备安装环境1、安装依赖包2、创建oracle用户组3、配置系统内核参数4、关闭selinux5、配置oracle用户环境6、修改用户的Shell限制 三、静默安装Oracle数据库1、创建oracle安装目录2…

spring MVC是如何找到html文件并返回的?

Spring MVC 搜索路径 启动一个SpringBoot项目时&#xff0c;访问http://localhost:8080&#xff0c;对于SpringMVC&#xff0c;它会默认把这段url看成http://localhost:8080/index.html&#xff0c;所以这两个url是等价的。 .html, .css, .js, .img …都是静态资源文件&#x…

基于Spring Boot+Vue的社区医院管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 一、研究背景 二…

ubuntu20.04搭建rtmp视频服务

1.安装软件 sudo apt-get install ffmpeg sudo apt-get install nginx sudo apt-get install libnginx-mod-rtmp 2.nginx配置 修改/etc/nginx/nginx.conf文件&#xff0c;在末尾添加&#xff1a; rtmp {server {listen 1935;application live {live on;}} } 3.视频测试 本…

idea创建maven-archetype-quickstart框架无法显示src/目录

一、配置好idea中Maven目录 1、不使用idea自带Maven&#xff0c; 2、配置好Maven环境变量M2_HOME 3、修改maven中 setting.xml文件 <?xml version"1.0" encoding"UTF-8"?><settings xmlns"http://maven.apache.org/SETTINGS/1.2.0"…

【Qt】常用控件

目录 一、控件概述 二、QWidget 三、Buttons类控件 3.1 QPushButton 3.2 QRadioButton 3.3 QCheckBox 3.4 QToolButton 四、Display Widgets&#xff08;显示类控件&#xff09; 4.1 QLabel 4.2 QLCDNumber 4.3 QProgressBar 4.4 QCalendarWidget 五、Input Widge…

C#中右键通过listview来控制datagridview字段值的是否显示、显示顺序,并存储到XML中。

最终显示效果&#xff0c;如下图所示&#xff1a; datagridview开始显示通过调用XML存储的字段值及顺序来显示&#xff0c;右键调出Tools来控制显示的顺序及是否显示&#xff0c;通过加号和减号进行调整顺序。 XML存储字段值及顺序 主要代码及事件&#xff1a; 获取datagridv…

GitHub配置SSH Key(详细版本)

GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是&#xff0c;不需要繁琐的验证过程&#xff0c;简化操作流程。比如新建的仓库可以下载, 但是提交需要账号密码。 步骤 一、设置git的user name和email 如果你是第一次使用&#xff0c;或者还没有配置过的话需要操作…

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.arkui.advanced.ComposeTitleBar(头像和单双行文本标题栏)

一种普通标题栏&#xff0c;支持设置标题、头像&#xff08;可选&#xff09;和副标题&#xff08;可选&#xff09;&#xff0c;可用于一级页面、二级及其以上界面配置返回键。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角…