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_directoriestarget_

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

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

相关文章

excel 表中有图片并在筛选特定行时,只显示该行的图片

建议:选中excel 表中某张图片,CtrlA,选中所有图片。再右键,在菜单中选设置对象格式 在属性里按下图设置, 生效之后,筛选某个产品的时候,就不会显示其他的不符合筛选条件的产品的图片了。

游戏引擎中的动画基础

一、动画技术简介 视觉残留理论 - 影像在我们的视网膜上残留1/24s。 游戏中动画面临的挑战: 交互:游戏中的玩家动画需要和场景中的物体进行交互。实时:最慢需要在1/30秒内算完所有的场景渲染和动画数据。(可以用动画压缩解决&am…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI…

GO语言:函数、方法、面向对象

本文分享函数的定义、特性、defer陷阱、异常处理、单元测试、基准测试等以及方法和接口相关内容 1 函数 函数的定义 func 函数名(参数列表) (返回值列表) { // 函数体(实现函数功能的代码) } 匿名函数的定义就是没有函数名,可以当做一个函…

docker入门(四)—— docker常用命令详解

docker 常用命令 基本命令 # 查看 docker 版本 docker version # 查看一些 docker 的详细信息 docker info 帮助命令(–help),linux必须要会看帮助文档 docker --help[rootiZbp15293q8kgzhur7n6kvZ /]# docker --helpUsage: docker [OPTI…

springboot3快速入门案例2024最新版

前边 springboot3 系统要求 技术&工具版本(or later)maven3.6.3 or later 3.6.3 或更高版本Tomcat10.0Servlet9.0JDK17 SpringBoot的主要目标是: 为所有 Spring 开发提供更快速、可广泛访问的入门体验。开箱即用,设置合理的…

WPF —— 控件模版和数据模版

1:控件模版简介: 自定义控件模版:自己添加的样式、标签,控件模版也是属于资源的一种, 每一个控件模版都有一唯一的 key,在控件上通过template属性进行绑定 什么场景下使用自定义控件模版,当项目里面多个地方…

综合知识篇12-软件开发方法考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例…

unraid docker.img扩容

unraid 弹Docker image disk utilization of 99%,容器下载/更新失败 我的版本是6.11.5,docker.img满了导致容器不能更新,遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来,我已经清理过只清理出来1G多点&…

Vue组件封装方案对比——v-if方式与内置component方式

近期在准备搭建一个通用组件库,而公司现有的各个系统也已有自己的组件库只是没抽离出来,但是目前有两套不同的组件封装方案,所以对于方案的选择比较困惑,于是对两种方式进行了对比,结合网上找到的一些开源组件库进行分…

Android 源码中 内置系统App(整个APP源码方式集成)

1. 如何新建一个系统 App 项目 使用 Android Studio 新建一个空项目 FirstSystemApp,包名设置为 com.yuandaima.firstsystemapp,语言选择 Java。后面为叙述方便称该项目为 as 项目。 接着在 jelly/rice14 目录下创建如下的目录和文件: 接着…

Angular进阶之八: Angular Animation在项目中的实践经验

使用 Angular 进行项目开发的程序员应该都很熟悉 Angular Animation。这是一个 Angular 原生的动画库,它可以替代或者辅助完成原本需要使用 css 的动画功能。 Angular 在国内的运用是很有限的,可借鉴的文档并不很丰富。尤其对于 Angular 动画模块的应用…

Tensorflow2.0笔记 - Himmelblau函数优化案例

本笔记记录Himmelblau函数优化案例代码,包括函数的图形绘制和梯度下降求解局部最优解的过程。 import tensorflow as tf import numpy as np from mpl_toolkits.mplot3d import Axes3D from matplotlib import pyplot as plt tf.__version__#Himmelblau函数 #https…

Java 学习和实践笔记(41):API 文档以及String类的常用方法

JDK 8用到的全部类的文档在这里下载: Java Development Kit 8 文档 | Oracle 中国

Http 超文本传输协议基本概念学习摘录

目录 HTTP协议 超文本传输协议 HyperText超文本 HTML超文本标记语言 HTTP协议原理 请求发送 服务器处理 响应发送 连接关闭或保持 HTTP协议版本 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 HTTP请求方法 GET POST PUT DELETE HEAD OPTIONS HTTP请求头字…

Flutter开发多端天气预报App:一场奇妙的编程之旅

在这个信息爆炸的时代,我们渴望获取最新的天气信息,以便更好地规划我们的生活。而作为程序员的我们,又怎能错过用技术手段打造一款个性化、便捷的天气预报App呢?在本篇博客中,我将带你踏上一场奇妙的编程之旅&#xff…

MacOS Xcode 使用LLDB调试Qt的 QString

环境: MacOS: 14.3Xcode: Version 15.0Qt:Qt 6.5.3 前言 Xcode 中显示 预览 QString 特别不方便, 而Qt官方的 lldb 脚本debugger/lldbbridge.py一直加载失败,其他第三方的脚本都 不兼容当前的 环境。所以自己研究写…

31-Java前端控制器模式(Front Controller Pattern)

Java前端控制器模式 实现范例 前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给…

内存泄漏检测、单向链表的操作

我要成为嵌入式高手之3月19日数据结构第二天!! ———————————————————————————— valgrind内存测试工具 让虚拟机上网、在虚拟机上下载软件,参考笔记: 我要成为嵌入式高手之2月3日Linux高编第一天&am…

线程和进程的区别和联系

一、什么是进程 进程(Process), 是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行 【资源分配和调度】 的一个独立单位。 进程是【程序】的【一次执行】(是计算机中程序的执行过程,而不是计算机中的程序)进程是系统进行【资源分配和…