zoukankan      html  css  js  c++  java
  • cmake引入三方库

    目录结构

    .
    |-- cmake
    |   |-- CompilerSettings.cmake
    |   |-- Options.cmake
    |   `-- ProjectJsonCpp.cmake
    |-- CMakeLists.txt
    |-- libdevcore
    |   |-- CMakeLists.txt
    |   |-- Foo.cpp
    |   `-- Foo.h
    `-- main
        |-- CMakeLists.txt
        `-- main.cpp
    

    根目录cmake

    # cmake版本要求
    cmake_minimum_required(VERSION 3.7)
    
    # 项目信息
    project(hello-cmake
            VERSION 1.0.0
            LANGUAGES CXX)
    
    # 添加模块目录
    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
    
    # 基本设置
    include(Options)
    include(CompilerSettings)
    
    # 下载安装依赖库
    include(ProjectJsonCpp)
    
    # 添加子目录
    add_subdirectory(libdevcore)
    add_subdirectory(main)
    

    cmake目录

    • Options.cmake:用于指定编译特性选项,比如是否编译test模块,构建类型等
    # 构建类型,支持Debug Release RelWithDebInfo MinSizeRel,默认为Release
    if (NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE "Release" CACHE STRING
            "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
    endif()
    
    • CompilerSettings.cmake:用于指定编译选项
    # 添加根目录到头文件搜索目录
    include_directories(BEFORE ${PROJECT_SOURCE_DIR})
    
    # 设置可执行文件输出路径
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
    
    # 设置编译器选项
    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
        # 各个编译模式下共用的编译选项
        set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pthread")
    
        # 各编译模式专有的编译选项
        set(CMAKE_CXX_FLAGS_DEBUG          "-Og -g")
        set(CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
        set(CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG")
        set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
    else()
        message(FATAL "Your compiler is not supported.")
    endif()
    
    • ProjectJsonCpp.cmake:引入jsoncpp库
    # 导入插件
    include(ExternalProject)
    include(GNUInstallDirs)
    
    # 下载安装依赖库
    ExternalProject_Add(jsoncpp
        # 项目根目录
        PREFIX ${CMAKE_SOURCE_DIR}/deps
        # 下载名
        DOWNLOAD_NAME jsoncpp-1.8.4.tar.gz
        # 下载链接(支持多源下载)
        URL https://github.com/open-source-parsers/jsoncpp/archive/1.8.4.tar.gz
        # sha256哈希值校验
        URL_HASH SHA256=c49deac9e0933bcb7044f08516861a2d560988540b23de2ac1ad443b219afdb6
        # cmake命令
        CMAKE_COMMAND ${CMAKE_COMMAND}
        # cmake参数
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
                   -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
                   -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                   -DJSONCPP_WITH_TESTS=OFF
                   -DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF
                   -DBUILD_STATIC_LIBS=ON
        # 日志记录
        LOG_CONFIGURE 1
        LOG_BUILD 1
        LOG_INSTALL 1
    )
    
    # jsoncpp的库路径和头文件目录
    ExternalProject_Get_Property(jsoncpp INSTALL_DIR)
    set(JSONCPP_INCLUDE_DIR ${INSTALL_DIR}/include)
    set(JSONCPP_LIBRARY ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX})
    file(MAKE_DIRECTORY ${JSONCPP_INCLUDE_DIR})  # Must exist.
    
    # JsonCpp库
    add_library(JsonCpp STATIC IMPORTED GLOBAL)
    set_property(TARGET JsonCpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INCLUDE_DIR})
    set_property(TARGET JsonCpp PROPERTY IMPORTED_LOCATION ${JSONCPP_LIBRARY})
    add_dependencies(JsonCpp jsoncpp)
    
    # 取消临时定义
    unset(INSTALL_DIR)
    

    libdevcore模块cmake

    # 获取源文件和头文件列表
    file(GLOB SRCS "*.cpp")
    file(GLOB HEADERS "*.h")
    
    # 添加库目标
    add_library(devcore STATIC ${SRCS} ${HEADERS})
    

    main模块cmake

    # 获取源文件和头文件列表
    file(GLOB SRCS "*.cpp")
    file(GLOB HEADERS "*.h")
    
    # 添加可执行目标
    add_executable(hello-cmake ${SRCS} ${HEADERS})
    
    # 添加依赖库
    target_link_libraries(hello-cmake PUBLIC devcore JsonCpp)
    
  • 相关阅读:
    DB2 9 基础(730 检验)认证指南,第 5 局部: 措置惩罚 DB2 对象(4)
    DB2 9 底子(730 磨练)认证指南,第 7 部分: XQuery 简介(3)
    DB2 9 基础(730 检修)认证指南,第 5 局部: 措置 DB2 工具(2)
    DB2 9 根本(730 检修)认证指南,第 6 局部: 数据并发性(2)
    DB2 9 根基(730 测验)认证指南,第 7 部分: XQuery 简介(1)
    运用 KScope 阅读并编辑你的源代码
    DB2 9 根底(730 考试)认证指南,第 6 部分: 数据并发性(3)
    DB2 9 根底内情根基(730 测验)认证指南,第 5 部分: 措置 DB2 工具(5)
    DB2 9 底子根基(730 考验)认证指南,第 7 部门: XQuery 简介(4)
    DB2 9 根基内情(730 测验)认证指南,第 5 局部: 处理处罚 DB2 工具(6)
  • 原文地址:https://www.cnblogs.com/HachikoT/p/13494950.html
Copyright © 2011-2022 走看看