zoukankan      html  css  js  c++  java
  • CMake 构建项目教程-简介

    CMake 构建项目教程-简介

      Linux 平台构建项目,选择了CLion作为C++的IDE,而CLion默认就是使用CMake构建项目,所以这里记录了CMake在构建项目过程的一些小知识。

    1. 项目的目录结构如下所示,包括静态库和动态库项目,同时也包括一个测试项目。

    .
    ├── bin
    │   └── test1
    ├── CMakeLists.txt
    ├── include
    │   └── apple.h
    ├── lib
    │   ├── liblearn.a
    │   ├── liblearn.so -> liblearn.so.1
    │   ├── liblearn.so.1 -> liblearn.so.1.0
    │   └── liblearn.so.1.0
    ├── src
    │   ├── apple.cpp
    │   └── CMakeLists.txt
    └── test
        ├── CMakeLists.txt
        └── main.cpp
    
    5 directories, 11 files

      bin 可执行文件的生成目录,lib 链接库文件的生成目录,include 头文件所在目录,src 源代码文件所在目录,test 测试程序源代码所在目录。

    2. . 根目录 CMakeList.txt

    cmake_minimum_required(VERSION 3.5)
    
    project( cmake_learn )
    
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    
    add_subdirectory( src )
    add_subdirectory( test )

    3. src 目录 CMakeList.txt

    # 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。
    aux_source_directory(. SOURCE_FILES )
    
    # 或者使用下面这种方式。
    #set( SOURCE_FILES
    #        apple.cpp
    #        orage.cpp )
    
    # 添加包含目录,CMake将在这些目录寻找 .cpp 文件中引用到的头文件。
    include_directories( ${PROJECT_SOURCE_DIR}/include )
    
    # 指定编译后的库文件的输出路径。
    set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib )
    
    # 生成目标动态库。
    add_library( learn SHARED ${SOURCE_FILES} )
    
    # 生成目标静态库。
    add_library( learn_static STATIC ${SOURCE_FILES} )
    
    # 指定静态库的输出名称。
    set_target_properties( learn_static PROPERTIES OUTPUT_NAME "learn" )
    
    # 允许静态库与动态库同时存在。
    set_target_properties( learn PROPERTIES CLEAN_DIRECT_OUTPUT 1 )
    set_target_properties( learn_static PROPERTIES CLEAN_DIRECT_OUTPUT 1 )
    
    # 指定动态库的版本:
    # VERSION 动态库版本;
    # SOVERSION API的版本。
    set_target_properties( learn PROPERTIES VERSION 1.0 SOVERSION 1 )

    4. test 目录 CMakeList.txt

    
    
    # 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。
    aux_source_directory(. SOURCE_FILES )
    # 添加包含目录,CMake将在这些目录寻找 .cpp 文件中引用到的头文件。
    include_directories( ${PROJECT_SOURCE_DIR}/include )
    
    # 指定编译后的可执行程序的输出路径。
    set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin )
    
    # 指定生成可执行程序。
    add_executable( test1 ${SOURCE_FILES} )
    
    # 添加链接库目录,CMake将在如下如目录中查找所链接的外部库。
    link_directories( ${PROJECT_SOURCE_DIR}/lib )
    
    # 指定链接库。
    target_link_libraries( test1
            learn )

    6. 总结

      目录树种使用的 h cpp 文件都是测试代码,并不重要,关键是分析清楚 CMake 是怎样嵌套的互相关联的,编译后生产的静态库与动态库都按预期出现在了 lib 目录中,测试的可执行文件也 生成在了 bin 目录中。

  • 相关阅读:
    算法竞赛入门经典训练指南
    git保护--git分支创建
    解决多个iframe嵌套而造成的多个滚动条问题
    css如何让div元素铺满整个屏幕
    第一个用python3写的爬虫小例子
    用JS获取当前页面的URL以及截取其中的字段
    css处理超出文本截断问题的两种情况(多行或者单行)
    约数的个数
    成绩排序
    八进制
  • 原文地址:https://www.cnblogs.com/wanghaiyang1930/p/6653316.html
Copyright © 2011-2022 走看看