首页 > 其他分享 >使用conan安装并使用Spdlog

使用conan安装并使用Spdlog

时间:2023-12-15 11:57:02浏览次数:22  
标签:cmake Spdlog only conan spdlog 使用 example build

Introduce

Very fast, header-only/compiled, C++ logging library.

https://github.com/gabime/spdlog.git

Install

Header-only version

复制include文件夹到你的项目中,并使用C++11。

$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j

在CMake项目中使用spdlog

# CMakeLists.txt
# Copyright(c) 2019 spdlog authors Distributed under the MIT License (http://opensource.org/licenses/MIT)

cmake_minimum_required(VERSION 3.11)
project(spdlog_examples CXX)

if(NOT TARGET spdlog)
    # Stand-alone build
    find_package(spdlog REQUIRED)
endif()

# ---------------------------------------------------------------------------------------
# Example of using pre-compiled library
# ---------------------------------------------------------------------------------------
add_executable(example example.cpp)
target_link_libraries(example PRIVATE spdlog::spdlog $<$<BOOL:${MINGW}>:ws2_32>)

# ---------------------------------------------------------------------------------------
# Example of using header-only library
# ---------------------------------------------------------------------------------------
if(SPDLOG_BUILD_EXAMPLE_HO)
    add_executable(example_header_only example.cpp)
    target_link_libraries(example_header_only PRIVATE spdlog::spdlog_header_only)
endif()

Conan Install

创建一个cmake项目,并添加官方例子,这里删减了一部分

#include "spdlog/spdlog.h"
#include "spdlog/cfg/env.h"  // support for loading levels from the environment variable
#include "spdlog/fmt/ostr.h" // support for user defined types

int main(int, char *[])
{
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:>8} aligned, {:<8} aligned", "right", "left");
    spdlog::shutdown();
	  return 0;
}

编写一个最简化的CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(spdlogDemo CXX)
add_executable(${PROJECT_NAME} src/main.cpp)

有序项目引用了第三方库spdlog,需要再在CMakeLists.txt中配置依赖,这里使用conan安装spdlog。详情可以参考conan.id

首先创建一个conanfile.txt

[requires]
spdlog/1.12.0
[generators]
CMakeDeps
CMakeToolchain

然后使用conan安装依赖

cd project_folder
conan install . --output-folder=build --build=missing

之后在cmake的过程中使用conan的工具链

cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build . --config=Release

此时构建会出问题的,这毋庸置疑,因为还没有将可执行程序链接到spdlog库以及头文件路径也没有设置。

对CMakeLists.txt作出一些修改:

cmake_minimum_required(VERSION 3.15)
project(spdlogDemo CXX)
find_package(spdlog REQUIRED) # 1 查找spdlog
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} spdlog::spdlog) # 2 链接spdlog

需要注意的是,链接的目标spdlog::spdlog可以在cmake过程日志中查看到,如下:

编译成功后查看运行结果

标签:cmake,Spdlog,only,conan,spdlog,使用,example,build
From: https://www.cnblogs.com/pengpengda/p/17903074.html

相关文章

  • Linux tracepoint使用和理解
    参考:如何使用TRACE_EVENT()宏来创建跟踪点1.如何查看tracepoint/sys/kernel/debug/tracing/events/通过perflisttracepoint查看2.tracepoint理解因此tracepoint方式如下:#undefTRACE_SYSTEM#defineTRACE_SYSTEMxhr_test#if!defined(_TRACE_TE_TEST_H)||def......
  • Ant Design Vue <a-tabs>标签内嵌使用
    <a-tabs :activeKey="activeKey" @change="handleTabChange">        <a-tab-pane v-for="(item, index) in menuList" :key="item.id" :tab="item.name" :index="index">          <div>......
  • Synchronized 和 Lock 的区别和使用场景
    Synchronized和Lock的概念Synchronized 是Java并发编程中很重要的关键字,另外一个很重要的是 volatile。Syncronized的目的是一次只允许一个线程进入由他修饰的代码段,从而允许他们进行自我保护。Synchronized很像生活中的锁例子,进入由Synchronized保护的代码区首先需要获......
  • Docker Compose 使用
    DockerCompose使用Compose简介Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。使用#yaml配置version:'3'services:web:......
  • cmake 的使用
    cmake简介cmake是一个软件自动化构建工具,在使用C/C++编写程序的时候,多个源文件编译一般是通过makefile工具进行编译生成。可以通过使用cmake生成一个makefile文件,再通过makefile文件生成程序。简而言之:cmake用于生成makefile文件,makefile文件用于编译源文件生成程序。......
  • 两个线程共享一个套接字,其中一个线程使用sendmsg函数不断发送消息到该套接字,另一个线
    以下是使用C语言写的一段代码,实现两个线程共享一个套接字,其中一个线程使用sendmsg函数不断发送消息到该套接字,另一个线程使用recvmsg函数不断接收该套接字的消息,并打印出来的功能点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.......
  • v-echarts 使用折线图
    <ve-linestyle="top:-40px"height="100%"width="100%":loading="yearChartLoading":data="yearChartData":extend="chartExtend":legend-visible="false":settings="yearSetting......
  • 12月14日插件的具体使用
    配置好环境之后你就可以选择使用mapper或者service了 调用和mapper基本相同但是提供的调用方法更多了。然后你就能够更方便的开始后端开发了。今天的另一件事是逻辑视图建模这是一个针对于外卖管理系统的逻辑视图建模。(一),分析系统用例,确定对象类外卖管理系统包括”商家......
  • Unity shader 里面使用数组
    很多人不知道Unityshader是支持通过C#脚本,往shader脚本里写入数组的。我不知道Properties里面怎么写,但是可以用C#代码往里写。数组的总长度似乎最大2048。注意,是所有数组的总长度加一起不能超过2048。比如你写了五个数组,每个数组的长度是100,五个数组的总长度就是500。不是......
  • google gemini api使用
    title:googlegeminiapi使用banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-1423:15:00tags:-googlegeminigooglegeminiapi使用google最近发布了geminiapi,我之前在我的博客介绍了如何申请,这篇文章来......