🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
⛳️ 推荐
🔧 从编写到构建
📁 管理复杂项目
⚙️ 进阶实用技巧
💡 内部构建与外部构建
CMake是一个跨平台的自动化构建系统,它使用一个名为CMakeLists.txt的配置文件来管理整个软件的构建、测试和打包过程。下面这个表格能帮你快速抓住CMake的核心脉络。
核心概念 | 说明 |
|---|---|
| 核心配置文件,用CMake语法定义构建规则。 |
项目与目标 |
|
变量与属性 | 使用 |
指令 | 如 |
外部构建 | 推荐的做法。在源码目录外创建 |
🔧 从编写到构建
一个基本的CMake项目流程如下:
编写CMakeLists.txt:在项目根目录创建该文件。
# 指定CMake最低版本要求 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(MyProject) # 设置C++标准 set(CMAKE_CXX_STANDARD 11) # 生成可执行文件,将多个源文件用空格或分号隔开 add_executable(hello main.cpp)配置与生成:在终端中,切换到项目根目录,执行以下命令。这会在
build目录下生成当前系统对应的构建文件(如Makefile)。mkdir build && cd build # 创建并进入build目录 cmake .. # 配置项目,指出CMakeLists.txt在上层目录编译项目:使用生成的构建文件进行编译。
cmake --build . # 通用编译命令 # 或者在Unix-like系统且生成Makefile时,也可以使用: # make运行程序:编译成功后,在
build目录下会生成可执行文件(如hello),直接运行即可。./hello
📁 管理复杂项目
对于结构复杂的项目,CMake提供了有效的管理方式。
组织项目结构:一个清晰的项目目录结构通常如下所示:
project/ ├── CMakeLists.txt # 顶层配置文件 ├── src/ # 源代码目录 │ └── main.cpp ├── include/ # 头文件目录 │ └── mylib.h └── lib/ # 库文件目录添加头文件路径:让编译器找到头文件。
target_include_directories(hello PUBLIC ${CMAKE_SOURCE_DIR}/include)创建和链接库:如果项目中有自己的库文件。
# 在子目录的CMakeLists.txt中创建库 add_library(mylib STATIC src/mylib.cpp) # 在主CMakeLists.txt中链接库 target_link_libraries(hello PRIVATE mylib)添加子项目:如果项目由多个子模块构成,每个子模块可以有自已的
CMakeLists.txt,在主文件中使用add_subdirectory(sub_dir)来包含。
⚙️ 进阶实用技巧
设置安装规则:
install命令可以定义项目安装到系统的规则,包括可执行文件、库和头文件。条件编译:使用
option()或if()语句实现条件编译。option(ENABLE_DEBUG "Enable debug mode" OFF) # 定义一个选项,默认为OFF if(ENABLE_DEBUG) target_compile_definitions(hello PRIVATE DEBUG=1) # 如果选项为ON,则定义宏DEBUG endif()查找外部依赖:使用
find_package()命令查找系统已安装的第三方库(如OpenCV、Boost)。
💡 内部构建与外部构建
CMake支持内部构建和外部构建。
内部构建:直接在源码目录中运行
cmake .,生成的文件会混在源码中,不推荐。外部构建:在源码目录外创建专门目录(如
build)进行构建,使源码保持干净,这是推荐的做法。
希望这些信息能帮助你快速上手CMake。如果你在某个具体应用场景遇到问题,或者想了解更深入的特性,我们可以继续探讨。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙