CMake学习笔记

本人主要从事QT开发工作,目前由于版本升级,为适应新版本开发,学习CMake。

以下为学习CMake的一些笔记,项目目录结构如图:

CMakeLists.txt中内容为:

cmake_minimum_required(VERSION 3.5)

project(qml_camke LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(cf_example_VERSION_MAJOR 1)
set(cf_example_VERSION_MINOR 0)
set(cf_example_VERSION_PATCH 1)

set(cf_example_VERSION "${cf_example_VERSION_MAJOR}.${cf_example_VERSION_MINOR}.${cf_example_VERSION_PATCH}")
set(cf_log "log.txt")

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

function(add_numbers num1 num2)
    math(EXPR result "${num1} + ${num2}")
    message("the result is ${result}")
endfunction()

add_numbers(1 2)

find_package(Boost 1.83 REQUIRED COMPONENTS filesystem system)

if(Boost_FOUND)
    message("boost found")
else()
    message(FATAL_ERROR "Connot find Boost")
endif()

configure_file(ver.h.in ${PROJECT_BINARY_DIR}/ver.h)

configure_file(readme  ${CMAKE_CURRENT_SOURCE_DIR}/readme)

find_package(Qt5 COMPONENTS Core Quick REQUIRED)

file(GLOB SOURCES "*.cpp"
    "*.h"
    "*.qrc"
    "include/*.h"
    "log/*"
    )

set(ALL_SRCS ${SOURCES})
add_executable(qml_camke ${ALL_SRCS})

target_link_libraries(qml_camke
    PRIVATE
    Qt5::Core
    Qt5::Quick
    Boost::filesystem
    )

set(LIB_SOUCE
    "lib/libhello_library.a"
    )

target_link_libraries(qml_camke
    PRIVATE
    ${PROJECT_SOURCE_DIR}/${LIB_SOUCE}
    ${PROJECT_SOURCE_DIR}/lib/libCHello_library.so
    )

笔记解析:

1.必须设置CMake版本 cmake_minimum_required(VERSION 3.5)
    2.设置项目名称 project(qml_camke LANGUAGES CXX)

    #与QT相关,进行以下设置
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_INCLUDE_CURRENT_DIR ON)

    #设置C++版本
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)

    #找到相应库
    find_package(Boost 1.83 REQUIRED COMPONENTS filesystem system)
    #链接相应库
    target_link_libraries(qml_camke  PRIVATE  Boost::filesystem)

    //同样的链接自定义库,动态库和静态库一样的方法
    set(LIB_SOUCE "lib/libhello_library.a")
    target_link_libraries(qml_camke     PRIVATE
        /home/li/lsy/cmakeCode/Day02/
        /home/li/lsy/cmakeCode/Day02/lib/libCHello_library.so
        )

    3.目前使用的是此方法加入所有资源文件,        | 还有其他方法:set(SOURCES src/Hello main.cpp)
    file(GLOB SOURCES "*.cpp"               |
        "*.h"                               |
        "*.qrc"                             |
        "include/*.h"                       |
        "log/*"                             |
        )                                   |
    设置输出文件,编译文件 add_executable(qml_camke )
    #编译静态库   add_library(hello_library STATIC )
    #编译动态库   add_library(hello_library SHARED )

    //设置输出路径
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY /home/li/lsy/cmakeCode/Day02/bin)

    #加入其他文件     前面的是自动生成的文件,后面的是自己添加近来的文件
    configure_file("readme"  /home/li/lsy/cmakeCode/Day02/"readme")

    #include_directories(dir1 dir2 ...) //用于指定包含头文件目录,以便在变异过错中能够正确的找到和包含目录中的头文件,
                                        //应该在add_executable或add_library之前
                                        //仅仅告诉编译器在那些目录查找头文件,并不主动包含这些头文件
                                        //推荐使用CMake的相对路径,以增强可移植性

    set(CMAKE_BUILD_TYPE Debug) //可换为Release     //设置生成类型为Debug

    //判断
    if(……)
        ……
    elseif(……) //else()
        ……
    endif()

    //函数
    function(add_numbers num1 num2)
        math(EXPR result " + ")
        message("the result is &{result}")
    endfunction()
    //调用
    add_numbers(1 2)

    //构建子项目
    //子项目sub1 sub2
    //每个子项目都包含自身CMakeListstxt,设置project(sub1) project(sub2)
    //主项目写以下语句进行包含
    add_subdirectory(sub1)
    add_subdirectory(sub2)

本人刚学不久,后面会好好研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值