• C++使用cmake创建项目


    cmake下载

    cmake支持linux、windows等跨平台使用。
    linux安装

    sudo apt install cmake
    
    • 1

    windows下载
    cmake官网下载地址,选择Windows x64 ZIP版本:https://cmake.org/download/

    linux使用cmake创建C++项目

    创建一个简单的C++项目,功能包含头文件、源文件、库文件,加载lib库等,目录结构如下:
    .
    ├── build
    ├── CMakeLists.txt
    ├── include
    │ ├── st.h
    │ └── work.h
    ├── lib
    │ └── libst.a
    ├── main.cpp
    └── src
    └── work.cpp

    1、build:构建目录,生成makefile文件和可执行文件的目录,初始为空。
    2、CMakeLists.txt:cmake文件。
    3、include:头文件目录。
    4、lib:库文件目录,这里以协程库libst为例。
    5、src:源文件目录。

    重点介绍CMakeLists.txt文件:

    cmake_minimum_required(VERSION 2.8) #设置cmake最低版本
    project("Test_CMK" CXX)	#设置项目名称
    option(UBUSYS "ubuntu system" OFF) #条件编译选项,默认OFF,cmake .. -DUBUSYS=ON进行cmake时,选项置为ON(true)
    SET(PREFIX ${CMAKE_CURRENT_SOURCE_DIR})#设置普通变量,CMAKE_CURRENT_SOURCE_DIR为当前cmake文件目录
    SET(BINDIR ${PREFIX})
    message (">>> pwd = ${PREFIX}")#打印变量
    
    if(UBUSYS)
      add_definitions(-D_UBUSYS_) # 宏定义 _UBUSYS_,类似代码里的#define
    endif()
    
    # 添加依赖头文件目录
    SET(INCDIR
        ${PREFIX}/include
    )
    INCLUDE_DIRECTORIES(${INCDIR})
    
    SET(SRCS
        ${PREFIX}/main.cpp
    )
    
    SET(SRCS ${SRCS}
        ${PREFIX}/src/work.cpp
    )
    
    #添加依赖库目录
    SET(LIBDIR
        ${PREFIX}/lib
    )
    LINK_DIRECTORIES(${LIBDIR})
    
    #添加依赖库
    SET(LIB_SO
        -lst
    )
    
    SET(RUN_MAIN "Test_CMK")
    #设置C++编译选项
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -march=native -Wall")
    
    # 添加可执行文件,并配相关文件
    ADD_EXECUTABLE(${RUN_MAIN} ${SRCS})
    
    TARGET_LINK_LIBRARIES(${RUN_MAIN} ${LIB_SO})#添加依赖库
    
    # 安装可执行文件到指定位置,并指定权限
    INSTALL(TARGETS ${RUN_MAIN} DESTINATION ${BINDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE WORLD_EXECUTE)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    main.cpp

    #include "work.h"
    #include "st.h"
    
    int main()
    {
        if(st_init() == 0){
            printf("st initialize success\n");
        }
        work mwork;
        mwork.dowork();
        
    #ifdef _UBUSYS_
    	printf("ubuntu system\n");
    #endif
    
        while(1){}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    work.h

    #ifndef WORK_H
    #define WORK_H
    
    
    class work
    {
    public:
        work();
        void dowork();
    };
    
    #endif // WORK_H
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    work.cpp

    #include "work.h"
    #include 
    
    work::work()
    {
    
    }
    
    void work::dowork()
    {
        printf("dowork.\n");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    cmake编译运行

    ##当前在CMakeLists.txt所在目录
    cd build/				#切换到构建目录
    cmake .. -DUBUSYS=ON	#预定义宏
    make -j					#编译,当前文件夹生成可执行文件Test_CMK
    ./Test_CMK				#运行
    
    #打印
    st initialize success
    dowork.
    ubuntu system
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    windows使用cmake创建C++项目

    cmake是跨平台的,在windows下一样可以使用,上述文件目录拷贝到windows下,cd切换到build目录下,执行:

    cmake ..
    
    • 1

    在build目录生成Test_CMK.sln,使用VS打开即可编译运行(上面的libst库是linux的,换成一个windows下的库测试即可),windows下不能使用make命令。

  • 相关阅读:
    linux下查找文件的相关命令
    使用Go语言和chromedp库下载Instagram图片:简易指南
    Elastic 网络爬虫:为你的网站添加搜索功能
    经典网络学习-ResNet代码实现
    web渗透工具
    vue3 中的 watch 小结
    程序员延寿指南「GitHub 热点速览 v.22.17」
    larave使用sanctum进行API鉴权
    结构体类型数据单链表的操作
    知乎乱码、b站首页乱码、蓝奏云网盘打不开都是DNS惹的祸!修改设备的DNS
  • 原文地址:https://blog.csdn.net/weixin_40355471/article/details/133200612