cmake

本文详细介绍了CMake的基本语法和用法,包括设置最小版本、定义工程、管理源文件、设置编译选项、生成库和可执行文件、设置编译类型以及添加宏定义。此外,还列举了CMake常用变量及其作用,帮助读者理解CMake在构建项目中的核心功能。

cmake

  1. cmake_minimum_required 指定cmake的最小版本要求

    #CMake最小版本要求2.8.2
    cmake_minimum_required(VERSION 2.8.2)
    
  2. project 定义工程名称,并指定工程支持的编译语言

    #指定工程名字和版本号,并指定编译语言
    project(HELLOWORLD VERSION 1.0.0 LANGUAGES C CXX)
    
  3. 显示定义变量

    #定义src变量,其值为main.cpp hello.cpp
    set(SRC main.cpp hello.cpp)
    
  4. 添加工程搜索头文件路径 相当于g++中-i参数

    #将/usr/include/myinclude和./include添加到头文件搜索路径中
    include_directories(/usr/include/myinclude ./include)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}/include")
    
  5. 向工程添加库文件搜索路径 相当于g++中-L参数

    #将/usr/lib/mylib和./lib添加到工程库文件搜索路径中
    link_directories(/usr/lib/mylib ./lib)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_CURRENT_SOURCE_DIR}/libs")
    
  6. 生成库文件

    #通过变量SRC生成libhello.so共享库 [SHARED|STATIC|MODULE]
    add_library(hello SHARED ${SRC})
    
  7. 添加编译参数

    #添加编译参数
    add_compile_options(-Wall -std=c++11 -o2 -g)
    
  8. 生成可以执行文件

    #编译main.cpp生成一个main的可执行文件
    add_executable(main main.cpp)
    
  9. 为target添加需要链接的共享库 相当于g++中-I参数

    #将hello动态文库文件链接到了执行文件main中
    target_link_libraries(mian hello)
    
  10. 向当前工程文件添加存放源文件的子目录,并可以执行中间二进制文件的存放路径

    #添加src子目录中一个CMakeLists.txt
    add_subdirectory(src)
    
  11. 将某个路径下所有源文件列表存储到一个变量中,通常用于历史自动构建原文件列表

    #定义SRC变量,其值为当前目录下所有的源代码文件
    aux_source_directory(. SRC)
    #编译SRC变量所代表的源码文件,生成main可执行文件
    add_executable(main $(SRC))
    
  12. 设置编译类型,通过CMAKE_BUILD_TYPE,[Debug,Release,RelWithDebInfo,MinSizeRel]

set(CMAKE_BUILD_TYPE Debug)
#再当前目录下会生成build目录,并在build中生成makefile文件
cmake -B build -DCMAKE_BUILD_TYPE=Debug
#对Debug模式开启调试信息,开启代码优化,Release开启o2代码优化,没有调试信息
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
  1. 添加全局宏定义
add_definitions(-DDEBUG -DREAL_COOL_ENGINEER)

CMake常用变量

PROJECT_SOURCE_DIR:工程的根目录
PROJECT_BINARY_DIR:运行 cmake 命令的目录,通常是 ${PROJECT_SOURCE_DIR}/build
PROJECT_NAME:返回通过 project 命令定义的项目名称
CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径
CMAKE_CURRENT_BINARY_DIR:target 编译目录
CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径
CMAKE_CURRENT_LIST_LINE:当前所在的行
CMAKE_MODULE_PATH:定义自己的 cmake 模块所在的路径,SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块
EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置

­CMAKE_MAJOR_VERSION:cmake 主版本号,比如 3.4.1 中的 3
­CMAKE_MINOR_VERSION:cmake 次版本号,比如 3.4.1 中的 4
­CMAKE_PATCH_VERSION:cmake 补丁等级,比如 3.4.1 中的 1
­CMAKE_SYSTEM:系统名称,比如 Linux-­2.6.22
­CMAKE_SYSTEM_NAME:不包含版本的系统名,比如 Linux
­CMAKE_SYSTEM_VERSION:系统版本,比如 2.6.22
­CMAKE_SYSTEM_PROCESSOR:处理器名称,比如 i686
­UNIX:在所有的类 UNIX 平台下该值为 TRUE,包括 OS X 和 cygwin
­WIN32:在所有的 win32 平台下该值为 TRUE,包括 cygwin

BUILD_SHARED_LIBS:这个开关用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库。如果 set(BUILD_SHARED_LIBS ON) 后,默认生成的为动态库
CMAKE_C_FLAGS:设置 C 编译选项,也可以通过指令 add_definitions() 添加
CMAKE_CXX_FLAGS:设置 C++ 编译选项,也可以通过指令 add_definitions() 添加

<(10条消息) CMakeLists.txt 语法介绍与实例演练_阿飞__的博客-优快云博客_cmakelist>

07-27
### CMake 使用教程、安装配置及常见问题解决方案 #### 安装 CMake 在不同的操作系统中,CMake 的安装方式有所不同。以下是一些常见的安装方法: ##### Linux 系统(以 Ubuntu 为例) 1. **离线安装** 可以从 [CMake 官网](https://cmake.org/download/) 下载适用于 Linux 的压缩包(如 `cmake-x.x.x-linux-x86_64.tar.gz`),然后进行手动安装: ```bash tar -xzvf cmake-x.x.x-linux-x86_64.tar.gz ``` 2. **配置环境变量** 将 CMake 的 `bin` 目录添加到系统环境变量中,以便全局使用: ```bash export PATH=/path/to/cmake/bin:$PATH ``` 可以将上述命令添加到 `~/.bashrc` 或 `~/.zshrc` 文件中,以便每次启动终端时自动加载: ```bash echo 'export PATH=/path/to/cmake/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` 3. **验证安装** 使用以下命令确认 CMake 是否安装成功: ```bash cmake --version ``` 如果输出 CMake版本号,则表示安装成功[^1]。 ##### Windows 系统 1. 从 [CMake 官网](https://cmake.org/download/) 下载 Windows 安装包(`.msi` 文件)。 2. 运行安装程序,并择将 CMake 添加到系统环境变量中。 3. 打开命令提示符(CMD)或 PowerShell,输入以下命令验证安装: ```bash cmake --version ``` ##### macOS 系统 可以使用 Homebrew 安装 CMake: ```bash brew install cmake ``` 验证安装: ```bash cmake --version ``` #### 配置 CMake 项目 CMake 项目的核心是 `CMakeLists.txt` 文件,它定义了项目的构建规则。以下是一个简单的 CMake 项目配置示例: ```cmake # 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(HelloCMake) # 添加可执行文件目标 add_executable(hello main.cpp) ``` 1. **创建构建目录** 通常建议在项目根目录下创建一个 `build` 子目录用于存放构建生成的文件: ```bash mkdir build cd build ``` 2. **生成构建文件** 在构建目录中运行 CMake,生成 Makefile 或其他构建系统所需的文件: ```bash cmake .. ``` 3. **编译项目** 使用 `make` 命令进行编译(适用于 Linux/macOS): ```bash make ``` 或者使用 Visual Studio 打开 `.sln` 文件进行编译(适用于 Windows)。 #### 常见问题及解决方法 1. **CMake 找不到编译器** - **问题描述**:CMake 在配置过程中提示找不到编译器。 - **解决方法**:确保系统中已安装编译器(如 GCC、Clang 或 MSVC),并且编译器的路径已添加到系统环境变量中。 2. **CMakeLists.txt 文件语法错误** - **问题描述**:CMake 配置失败,提示语法错误。 - **解决方法**:检查 `CMakeLists.txt` 文件中的语法是否正确,特别是命令的大小写和参数顺序。 3. **找不到依赖库** - **问题描述**:编译过程中提示找不到某些依赖库。 - **解决方法**:确保所有依赖库已正确安装,并且在 `CMakeLists.txt` 中使用 `find_package()` 或 `include_directories()` 正确引用。 4. **Android Studio 中使用 CMake** - **问题描述**:在 Android Studio 中配置 CMake 时遇到问题。 - **解决方法**:可以使用 Android Studio 自带的 CMake 支持,创建一个支持 C++ 的项目,查看生成的 `CMakeLists.txt` 文件,确保路径和依赖项配置正确[^5]。 #### 学习资源 - **《CMake + Practice》**:这是一篇适合初学者的中文入门教程,适合了解 CMake 的基本概念和使用方法[^2]。 - **官方文档**:[CMake 官方文档](https://cmake.org/cmake/help/latest/) 是深入了解 CMake 各种命令和高级用法的最佳资源。 - **实践项目**:通过实际项目学习 CMake 的使用,尤其是复杂的项目结构和依赖管理。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值