CMake 构建项目教程

Cmake介绍

CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单

项目架构
  1. 项目的目录结构如下所示,包括静态库和动态库项目,同时也包括一个测试项目。
├── bin/
├── CMakeLists.txt
├── lib/
│   ├── libthirdpart.a
│   ├── libthirdpart.dylib
├── include/
│   └── main.h
├── src/
│   ├── main.cpp
│   └── CMakeLists.txt
├── thirdparty/
│   ├── src/
│   ├── include/
│   └── CMakeLists.txt
└── test/
    ├── CMakeLists.txt
    └── test.cpp
命令介绍
  • set_target_properties
set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)

本命令用来配置target的属性(一般用于静态库或动态库)
OUTPUT_NAME 输出名的设定
PREFIX 输出前缀的设定
POSTFIX 输出后缀的设定

  • link_directories : 动态链接库或静态链接库的搜索路径
  • add_library : 编译动态(静态)库
  • add_subdirectory : 包含子目录
  • include_directories : 指定头文件的搜索路径
  • install : 指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等
INSTALL(TARGETS targets...[[ARCHIVE|LIBRARY|RUNTIME][DESTINATION <dir>][PERMISSIONS permissions...][CONFIGURATIONS
[Debug|Release|...]][COMPONENT <component>][OPTIONAL]]
  • target_link_libraries : 将若干库文件链接到生成的目标
target_link_libraries(<target> [item1 [item2 [...]]]
                      [[debug|optimized|general] <item>] ...)

The named <target>must have been created in the current directory by a command such as add_executable() or add_library().

  • 查找源文件

    • aux_source_directory(. SRC_LIST) : 查找当前目录下所有的源文件并保存到SRC_LIST变量里
    • file(GLOB CMAKE_FILES "src/cmake*") : 查找src目录下所有以cmake开头的文件并保存到CMAKE_FILES变量里
    • file(GLOB_RECURSE CMAKE_FILES "src/cmake*") : file命令同时支持目录递归查找
  • 传递FLAGS给C++编译器:设置CMAKE_CXX_FLAGS变量

    set(CMAKE_CXX_COMPILER      "clang++" )         # 显示指定使用的C++编译器
    set(CMAKE_CXX_FLAGS   "-std=c++11")             # c++11
    set(CMAKE_CXX_FLAGS   "-g")                     # 调试信息
    set(CMAKE_CXX_FLAGS   "-Wall")                  # 开启所有警告
    set(CMAKE_CXX_FLAGS_DEBUG   "-O0" )             # 调试包不优化
    set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG " )   # release包优化
    

    解释

    CMAKE_CXX_FLAGS 是CMake传给C++编译器的编译选项,通过设置这个值就好比 g++ -std=c++11 -g -Wall

    CMAKE_CXX_FLAGS_DEBUG 是除了CMAKE_CXX_FLAGS外,在Debug配置下,额外的参数

    CMAKE_CXX_FLAGS_RELEASE 同理,是除了CMAKE_CXX_FLAGS外,在Release配置下,额外的参数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容