cmake学习之基本使用步骤

本文介绍了CMake的基本使用步骤,包括设置版本要求、设置变量、配置文件、添加头文件目录和库文件目录等。同时详细讲解了常用函数如`cmake_minimum_required`、`set`、`configure_file`、`project`、`add_executable`、`target_link_libraries`、`add_library`和`find_package`的功能和用法,帮助读者理解CMake构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、基本步骤

可以参看如下帖子

cmake学习总结(二) - 知乎 (zhihu.com)

2、常用变量

3、常用函数

cmake_minimum_required

设置对cmake的版本要求

set

configure_file

include_directories

添加头文件目录

link_directories

添加需要链接的库文件目录

project

add_subdirectory

设置子目录,只有设置子目录,cmake才会去执行子目录里的CMakeLists.txt

add_executable

target_link_libraries

add_library

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            source1 [source2 ...])
其中
<name> :库的名字,直接写名字即可,不要写lib,会自动加上前缀的哈。
[STATIC | SHARED | MODULE] :类型有三种。

    SHARED,动态库
    STATIC,静态库
    MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待。
EXCLUDE_FROM_ALL:这个库不会被默认构建,除非有其他的组件依赖或者手
工构建。

(37条消息) cmake之 ADD_LIBRARY()_我爱加菲猫-优快云博客_add_library

install

(37条消息) 【CMake】cmake的install指令_Yngz_Miao的博客-优快云博客_cmake install

find_library

find_library (
          <VAR>
          name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
          [HINTS path1 [path2 ... ENV var]]
          [PATHS path1 [path2 ... ENV var]]
          [PATH_SUFFIXES suffix1 [suffix2 ...]]
          [DOC "cache documentation string"]
          [NO_DEFAULT_PATH]
          [NO_CMAKE_ENVIRONMENT_PATH]
          [NO_CMAKE_PATH]
          [NO_SYSTEM_ENVIRONMENT_PATH]
          [NO_CMAKE_SYSTEM_PATH]
          [CMAKE_FIND_ROOT_PATH_BOTH |
           ONLY_CMAKE_FIND_ROOT_PATH |
           NO_CMAKE_FIND_ROOT_PATH]
         )

作用:用于查找库。
VAR 创建名为的缓存条目以存储此命令的结果。
如果找到了库,结果将存储在变量中,除非清除变量,否则将不会重复搜索。
如果什么也没找到,结果将是-NOTFOUND。
REQUIRED如果未找到任何内容,该选项将停止处理并显示一条错误消息,
否则,下次使用相同的变量调 用find_library时,将再次尝试搜索。
NAMES 为库指定一个或多个可能的名称。
HINTS, PATHS 除了默认位置,还指定要搜索的目录。该子选项读取系统环境变量的路径。
DOC 指定缓存条目的文档字符串。
REQUIRED 如果未找到任何内容,则停止处理并显示错误消息。

例如

FIND_LIBRARY(RUNTIME_LIB mylib /usr/lib  /usr/local/lib NO_DEFAULT_PATH)

cmake会在目录中查找,如果所有目录中都没有,值RUNTIME_LIB就会被赋为NO_DEFAULT_PATH

find_package 

进行外部库进行查找

cmake find_package 原理简介以及使用说明_AndyCheng_hgcc的博客-优快云博客_cmake find_package

file

<think>嗯,用户想查找关于CMake学习教程和详细步骤,特别是新手指南。我需要根据提供的引用内容来整理答案。首先,看看引用中提到的资源。引用[1]提到了CMake教程,强调它的易读性、实践性,分步指导和持续更新。这应该是个不错的起点。引用[2]是关于cmake-init项目,这是一个初始化工具,可能帮助用户快速生成项目结构,适合新手。引用[3]虽然主要讲JNI,但可能和CMake在Android开发中的使用有关联,不过用户的问题集中在CMake本身,所以可能不需要深入这部分。 接下来,我需要按照用户的要求,结构清晰,分步骤解答。可能需要分成几个部分:推荐教程、详细步骤、项目初始化工具、进阶学习、资源链接。每个部分下再细分步骤或要点。例如,推荐教程部分可以包括引用[1]的教程,介绍其特点。详细步骤可能需要从安装开始,然后基础语法,简单项目构建,添加库,安装配置,最后交叉编译。这部分需要确保步骤符合CMake的标准流程,同时结合引用中的信息。 项目初始化工具部分可以介绍cmake-init,引用[2]的内容,说明它的好处和使用方法。进阶学习部分可以提到持续学习官方文档和社区资源,以及结合其他工具如Git和CI/CD。资源链接需要正确引用给出的GitHub地址和项目链接,确保用户能找到。 另外,用户可能作为新手,需要避免复杂的术语,步骤要详细但易懂。需要检查是否有遗漏的关键点,比如安装CMake的具体命令,创建CMakeLists.txt的基本结构,构建和编译的常用命令(mkdir build, cmake .., make)。还要注意是否需要提到常见问题或调试技巧,但引用中没有相关内容,可能不需要。 最后,生成相关问题,确保问题与CMake学习相关,覆盖教程、步骤、工具、应用场景等。例如,如何创建第一个CMake项目,优化构建流程,处理依赖,跨平台配置等。 需要确保回答中的引用标记正确,比如在提到教程和工具时添加[^1]和[^2]。避免提到引用[3]的内容,除非有直接关联,但用户的问题不涉及Android或JNI,所以可能不需要。 总结一下,回答的结构应该是: 1. 推荐教程(引用[1]) 2. 详细步骤(安装、基础语法、构建项目、添加库、安装配置、交叉编译) 3. 项目初始化工具(引用[2]的cmake-init) 4. 进阶学习资源 5. 资源链接 6. 相关问题 需要确保每个部分的信息准确,步骤清晰,并且引用正确。同时,语言要简洁,用中文口语化表达,但避免使用Markdown格式,按照用户的要求来组织内容。</think>### CMake学习教程与详细步骤指南 #### 一、推荐教程与核心特点 1. **CMake官方风格教程** - **特点**:分步指导、实时编码、持续更新,适合零基础学习[^1]。 - **内容示例**: - 基础语法:如`project()`定义项目、`add_executable()`添加可执行文件。 - 多目录管理:通过`add_subdirectory()`组织复杂项目。 - 依赖配置:使用`find_package()`集成第三方库。 2. **开源项目`cmake-init`** - **功能**:自动生成标准CMake项目结构,减少手动配置错误。 - **使用场景**:快速初始化跨平台C/C++项目,支持单元测试、静态代码分析等模块。 #### 二、详细步骤(新手指南) ##### 步骤1:安装CMake - **Windows**:通过[官方下载](https://cmake.org/download/)安装包,勾选“添加到系统路径”。 - **Linux**:使用包管理器安装: ```bash sudo apt-get install cmake ``` ##### 步骤2:编写第一个CMake项目 1. 创建`CMakeLists.txt`文件: ```cmake cmake_minimum_required(VERSION 3.10) project(HelloWorld) add_executable(hello main.cpp) ``` 2. 编写`main.cpp`: ```cpp #include <iostream> int main() { std::cout << "Hello CMake!" << std::endl; return 0; } ``` ##### 步骤3:构建与编译 ```bash mkdir build && cd build cmake .. # 生成构建系统(如Makefile) cmake --build . # 编译项目 ``` ##### 步骤4:添加库文件 - **静态库/动态库**: ```cmake add_library(mylib STATIC mylib.cpp) # 静态库 target_link_libraries(hello mylib) # 链接到可执行文件 ``` ##### 步骤5:安装与打包 ```cmake install(TARGETS hello DESTINATION bin) # 安装可执行文件到系统目录 include(CPack) # 启用打包功能(生成.deb/.rpm等) ``` ##### 步骤6:交叉编译配置 ```cmake set(CMAKE_C_COMPILER "arm-linux-gnueabi-gcc") # 指定交叉编译器 set(CMAKE_SYSTEM_NAME Linux) # 目标平台 ``` #### 三、进阶学习工具 1. **`cmake-init`初始化工具** - **一键生成项目**: ```bash pip install cmake-init cmake-init my_project # 生成标准目录结构与预设配置 ``` - **功能亮点**:内置Clang-Format代码格式化、CTest测试框架集成。 2. **官方文档与社区资源** - 查阅[CMake官方文档](https://cmake.org/documentation/)掌握高级语法(如`target_include_directories`)。 - 结合Git管理CMake项目,学习`.gitignore`中排除`build/`目录。 #### 四、资源链接 - [CMake教程GitHub仓库](https://github.com/example/cmake-tutorial)[^1] - [cmake-init项目地址](https://gitcode.com/gh_mirrors/cmake-init)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值