一、介绍
ExternalProject命令可以很好的解决项目中使用第三方库,提高项目的可用性.ExternalProject_Add()函数创建一个外部工程可以驱动下载、更新/补丁、配置、构建、安装和测试流程的自定义目标
语法:
ExternalProject_Add(<name> [<option>...])
二、实例
文件目录
spdlog.cmake
include(ExternalProject)
set(SPDLOG_ROOT ${CMAKE_BINARY_DIR}/thirdparty/SPDLOG)
set(SPDLOG_GIT_TAG v1.4.1) # 指定版本
set(SPDLOG_GIT_URL https://github.com/gabime/spdlog.git) # 指定git仓库地址
set(SPDLOG_CONFIGURE cd ${SPDLOG_ROOT}/src/SPDLOG && cmake -D CMAKE_INSTALL_PREFIX=${SPDLOG_ROOT} .) # 指定配置指令(注意此处修改了安装目录,否则默认情况下回安装到系统目录)
set(SPDLOG_MAKE cd ${SPDLOG_ROOT}/src/SPDLOG && make) # 指定编译指令(需要覆盖默认指令,进入我们指定的SPDLOG_ROOT目录下)
set(SPDLOG_INSTALL cd ${SPDLOG_ROOT}/src/SPDLOG && make install) # 指定安装指令(需要覆盖默认指令,进入我们指定的SPDLOG_ROOT目录下)
ExternalProject_Add(SPDLOG
PREFIX ${SPDLOG_ROOT}
GIT_REPOSITORY ${SPDLOG_GIT_URL}
GIT_TAG ${SPDLOG_GIT_TAG}
CONFIGURE_COMMAND ${SPDLOG_CONFIGURE}
BUILD_COMMAND ${SPDLOG_MAKE}
INSTALL_COMMAND ${SPDLOG_INSTALL}
)
# 指定编译好的静态库文件的路径
set(SPDLOG_LIB ${SPDLOG_ROOT}/lib/spdlog/libspdlog.a)
# 指定头文件所在的目录
set(SPDLOG_INCLUDE_DIR ${SPDLOG_ROOT}/include)
CMakeList .txt
project(ImportExternalProject)
cmake_minimum_required(VERSION 3.11)
add_definitions(-std=c++11) # 指定采用c++11进行编译(spdlog需要c++11)
add_executable(test_spdlog testspdlog.cc)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
include(spdlog)
target_link_libraries(test_spdlog ${SPDLOG_LIB})
target_include_directories(test_spdlog PRIVATE ${SPDLOG_INCLUDE_DIR})
testspdlog.cc
#include "spdlog/spdlog.h"
#include "spdlog/sinks/basic_file_sink.h"
int main()
{
spdlog::info("Welcome to spdlog!");
spdlog::error("Some error message with arg: {}", 1);
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("{:<30}", "left aligned");
spdlog::set_level(spdlog::level::debug); // Set global log level to debug
spdlog::debug("This message should be displayed..");
// change log pattern
spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
// Compile time log levels
// define SPDLOG_ACTIVE_LEVEL to desired level
SPDLOG_TRACE("Some trace message with param {}", 42);
SPDLOG_DEBUG("Some debug message");
// Set the default logger to file logger
auto file_logger = spdlog::basic_logger_mt("basic_logger", "basic.txt");
spdlog::set_default_logger(file_logger);
}
参考:
ExternalProject — CMake 3.25.1 Documentation
cmake(三十八)Cmake之ExternalProject_Add指令_wzj_110的博客-CSDN博客_externalproject_add
https://blog.csdn.net/zym326975/article/details/106118063
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)