首页 > 编程语言 >cmake以源码的方式引入第三方项目

cmake以源码的方式引入第三方项目

时间:2024-05-20 10:33:25浏览次数:35  
标签:cmake fmt SOURCE 源码 CMAKE 第三方 DIR

最前#

  • 本文将介绍一种以源码的方式引入第三方库的方法

准备#

  • 主项目,需要引用第三方库的某些函数
  • 第三方库,以源码的形式提供给主项目使用
  • 注意: 本文的背景:已经将第三方源码下载好。

一个例子#

我这里准备一个简单的项目,调用第三方库 fmt;其中fmt是以源码的形式引入项目

  • cmake version: 3.17
  • platform: os X 10.15

目录结构#

Copy Highlighter-hljs
.
├── build            # 存放cmake配置结果
├── cmake         # 自己写的 .cmake 文件存放目录
├── ext            # 第三方源码存放目录
│   ├── fmt      # fmt库
│   └── spdlog-1.x  # spdlog库
└── src      # 主项目的 .cc文件目录

fmt.cmake 文件内容#

spdlog与fmt库都是第三方库,本文只演示fmt库。 fmt.cmake存放在cmake目录下

Copy Highlighter-hljs
include(FetchContent)

FetchContent_Declare(
    fmt 
    SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/fmt
)

FetchContent_GetProperties(fmt)
if (NOT fmt_POPULATED)
    FetchContent_Populate(fmt)
    # win:下面这行是将fmt添加到解决方案中
    add_subdirectory(${fmt_SOURCE_DIR} ${fmt_BINARY_DIR})
endif()

其中, FetchContent_Declare用法如下:

Copy Highlighter-hljs
FetchContent_Declare(
    fmt             # 库的名字
    SOURCE_DIR ${PROJECT_SOURCE_DIR}/ext/fmt            # 库在本地的哪个目录
)

回报根目录下的 CMakeLists.txt#

使用 include 包含库 fmt 。

Copy Highlighter-hljs
# 设置搜索路径
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
# 包含目录
include(fmt)

完整源码

Copy Highlighter-hljs
cmake_minimum_required(VERSION 3.17)

# ---------------------------------------------------------------------------------------------------
# 1. set name
project(demo_fp)

aux_source_directory( "${CMAKE_CURRENT_SOURCE_DIR}/src" src_cc)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
include(fmt)

if(fmt_FOUND)
    message(STATUS "1111 its not find fmt library- ------------")
else()
	message(STATUS "2222 its find fmt library- ------------")
	add_executable(${PROJECT_NAME})
	target_sources(${PROJECT_NAME} PUBLIC ${src_cc})
	target_link_libraries(${PROJECT_NAME} PUBLIC fmt::fmt)
	
endif(fmt_FOUND)

cmake配置结果#

转到 build 目录,执行cmake .. , 结果:

再执行命令: make 即可得到结果

well done.

src/main.cc内容#

根目录 src下的main.cc文件内容

Copy Highlighter-hljs
#ifdef _WIN32
#pragma once
#endif 

#include <fmt/format.h>
#include <iostream>
int main(int argc, char* argv[], char* env[])
{
    std::string str = fmt::format("{0} + {1} = {2}", 1, 2, 3);
    std::cout << "str=" << str.c_str() << "\n\n";

    return 0;
}

可执行程序运行结果#

ref:https://www.cnblogs.com/pandamohist/p/14247647.html

 

标签:cmake,fmt,SOURCE,源码,CMAKE,第三方,DIR
From: https://www.cnblogs.com/lidabo/p/18201345

相关文章

  • MySQL全文索引源码剖析之Insert语句执行过程
    本文分享自华为云社区《MySQL全文索引源码剖析之Insert语句执行过程》,作者:GaussDB数据库。1.背景介绍全文索引是信息检索领域的一种常用的技术手段,用于全文搜索问题,即根据单词,搜索包含该单词的文档,比如在浏览器中输入一个关键词,搜索引擎需要找到所有相关的文档,并且按相关性......
  • 在CMakeLists.txt中添加源文件的几种方法
    单个.cpp源文件的情况用这段代码进行测试,CMake中添加一个可执行文件作为构建目标:#include<cstdio>intmain(){printf("Hello,world!\n");}指定源文件的时候可以有两种方式。在创建目标的时候直接指定源文件add_executable(mainmain.cpp)先创建目标,再添加源......
  • cmake配置项目引用动态库
    note#本文将介绍使用FIND_PACKAGE配置项目动态库的方法cmakeversion:3.18platform:win1020H2概述#创建了一个动态库,再由主项目调用该动态库。find<lib库名>.cmake的内容是:1.定义动态库的头文件所在路径2.定义库所在路径写好cmake文件后,也可以方便给其他人调用,省......
  • lodash已死?radash库方法介绍及源码解析 —— 函数柯里化 + Number篇
    写在前面tips:点赞+收藏=学会!主页有更多其他篇章的方法,欢迎访问查看。本篇我们继续介绍radash中函数柯里化和Number相关的方法使用和源码解析。函数柯里化chain:创建一个函数链并依次执行使用说明功能描述:用于创建一个函数链,该链依次执行一系列函数,每个函数的输出......
  • stm32cubemx+cmake vscode开发
    stm32cubemx在2.17之后可以新建cmake工程文件,然后就可以在vscode中无痛编译单片机程序,可以再配合openocd等编译调试下载1.准备1.1stm32cubemx1.2vscode1.3arm-none-eabi-gcc2.cubemx生成cmake工程文件2.1利用__weak函数实现cubemx代码与用户代码分离2.2利用宏定义......
  • 百度 Apollo 自定义安装第三方库(以 libtorch 为例)_apollo 使用自定义库
    CSDN搬家失败,手动导出markdown后再导入博客园百度Apollo是一个非常优秀的自动驾驶框架,但我们平时在开发中也会遇到各种原repo没有处理的问题。笔者近期想用pytorch的C++前端推理模型,但是遇到了libtorch版本与pytorch版本不匹配的问题,因此想自己安装一个新版本的li......
  • 关于学习VUE源码的感受! 学习VUE源码最好的方式 !!!
    仓库地址仓库whoelse666mini-vue崔学社mini-vue文章导航Vue3源码实战课|构建你自己的Vue3|掌握源码最有效的学习方法就是手写一遍!Vue3源码实战课阮一峰推荐最佳学习vue3源码的利器-mini-vue学习源码经历过程vue从出来到现在也有好些年了,相信几乎所所有从事......
  • 全网首一份!你最需要的PPTP MS-CHAP V2 挑战响应编程模拟计算教程!代码基于RFC2759,附全
    本文基于网络密码课上的实验本来想水一水就过去,代码就网上找找,不行就GPT写,但是!一份都找不到,找到的代码都是跑不了的,总会是就是乱七八糟。所以准备认真的写一份。代码编译成功的前提是要预先装好openssl库!本随笔主要有三个内容:编写程序,模拟计算NTResponse、AuthenticatorRespo......
  • 项目管理案例-关于第三方公司提供的组件质量欠佳的问题
    项目管理案例-关于第三方公司提供的组件质量欠佳的问题背景     商用密码应用安全性评估(简称密评),是指按照有关法律法规和标准规范,对网络与信息系统使用商用密码技术、产品和服务的合规性、正确性、有效性进行检测分析和评估验证的活动。依据《密码法》、《商用密码管理条例......
  • 64-SpringBoot源码分析
    Starter是什么?我们如何使用这些Starter?为什么包扫描只会扫描核心启动类所在的包及其子包?在SpringBoot启动过程中,是如何完成自动配置的?内嵌Tomcat是如何创建并启动的?引入了web场景对应的Starter,SpringMVC是如何完成自动装配的?1.源码环境构建https://gith......