CMake 基本用法

本文介绍CMake的基础用法,包括创建基本的CMakeLists文件、添加子目录、使用目标文件的安装方法、添加库文件及如何链接外部共享库和头文件等内容。

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

1. 最基本的CMakeLists 文件
# 它将 main.c 编译为 hello 的可执行文件
PROJECT (HELLO)    # 项目名称
SET(SRC_LIST main.c)   # 源文件
ADD_EXECUTABLE(hello ${SRC_LIST})  # 可执行文件

Cmake 是强烈推荐外部编译的,内部编译会生成一些无法自动删除的中间文件。使用 cmake [CMakeLists.txt path] 进行编译,会生成Makefile等文件,在此执行 make, 即可生成可执行文件。

2. 添加子文件

可以使用ADD_SUBDIRECROTY(source_dir [binary_dir][EXCLUDE_FROM_ALL])来添加下一层的 CMakeLists.txt, 并指定目录.


ADD_SUBDIRECTORY(src bin) # 将 src目录编译为 bin 目录

另外可以都可以通过 SET 指令重新定义 EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量来指定最终的目标二进制的位置(指最终生成的 hello 或者最终的共享库,不包含编译生成的中间文件)

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
3. 使用目标文件的安装:
  • 目标文件的安装

    INSTALL(TARGETS myrun mylib mystaticlib
       RUNTIME DESTINATION bin  # 可执行二进制库
       LIBRARY DESTINATION lib  # 动态库
       ARCHIVE DESTINATION libstatic  # 静态库
    )
  • 普通文件的安装

    INSTALL(FILES README DESTINATION share)
  • 目录的安装

    INSTALL(DIRECTORY icons scripts/ DESTINATION share/myproj)  
    
    # icons 文件夹 scripts 目录下的所有文件
    

如果你要直接安装到系统,可以使用如下指令:

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
4. 添加库
   ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
   # SHARED,动态库
   # STATIC,静态库
   # MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待
   # 更新库版本号
   SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1) 
   # VERSION 指代动态库版本,SOVERSION 指代 API 版本
5. 使用外部共享库和头文件
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...) # 添加头文件包含路径
TARGET_LINK_LIBRARIES(target library1 library2...) # 为 target 添加共享库
6. 其它
  • 设置最小的CMake 版本

    cmake_minimum_required(VERSION 3.1.0)
  • 限定使用 C++11

    
    # Use C++11
    
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    message(STATUS "C++11 support has been enabled by default.")
  • 常见的变量

    CMAKE_CURRENT_SOURCE_DIR  # 当前 CMakeLists 所在路径

### CMake 文件的使用方法 CMake 是一种强大的跨平台构建工具,其核心功能是通过 `CMakeLists.txt` 文件定义项目的结构和依赖关系。以下是关于如何编写和使用 CMake 文件的具体说明。 #### 1. 创建基本项目结构 首先需要创建一个文件夹作为项目的根目录,并在其中放置源代码和其他必要的资源文件。例如: ```bash mkdir cmakeTest && cd cmakeTest touch CMakeLists.txt main.c ``` 上述命令会创建名为 `cmakeTest` 的文件夹并进入该文件夹,在里面生成 `CMakeLists.txt` 和 `main.c` 文件[^1]。 #### 2. 编写 CMakeLists.txt 文件 `CMakeLists.txt` 是 CMake 构建的核心配置文件。下面是一个简单的示例,展示如何编译一个 C 程序: ```cmake # 设置最低版本需求 cmake_minimum_required(VERSION 3.0) # 定义项目名称和使用的编程语言 project(MyProject LANGUAGES C) # 添加可执行文件 target 名称为 myExecutable 并指定 source file add_executable(myExecutable main.c) ``` 这段脚本设置了最小所需的 CMake 版本、指定了项目名称及其所用的语言,并声明了一个由 `main.c` 文件组成的可执行目标 `myExecutable`。 #### 3. 执行 CMake 配置过程 完成以上步骤后,可以通过运行以下命令来配置和生成构建系统: ```bash cmake . ``` 这将在当前目录下生成适合本地开发环境的构建文件(如 Makefile 或 Visual Studio 解决方案)。如果希望清理这些临时生成的文件,则可以使用如下命令清除无用数据: ```bash rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake main Makefile ``` 注意这里的路径应替换为你实际的工作区位置[^2]。 #### 4. 构建项目 一旦完成了前面提到的所有操作之后就可以开始真正的编译流程了。对于基于 Unix 的系统来说通常只需要简单地调用 make 即可启动整个编译链路: ```bash make ``` 而对于 Windows 用户则可能需要用到其他特定于平台的方式来进行下一步处理,比如借助 MSBuild 工具或者直接打开解决方案文件(.sln),具体取决于之前选择的目标生成器类型[^4]。 --- ### 更多高级特性介绍 除了上面的基础应用之外,CMake还提供了许多额外的功能模块帮助开发者更高效地管理复杂工程项目的信息可以在官方文档找到更多细节描述[^3]: - **查找库**:利用 find_package() 函数自动定位第三方依赖项的位置; - **测试框架集成**:支持 Google Test 等单元测试套件无缝接入到 CI 流程当中去; - **安装规则定制化**:允许自定义应用程序部署后的布局形式等等. 总之掌握好这个强大而灵活的工具有助于显著提升软件研发效率! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值