cmakelist入门
时间: 2025-02-11 18:06:17 浏览: 38
### CMakeLists.txt 入门教程
#### 了解CMake基础概念
CMake是一种跨平台的构建系统生成器,能够管理软件项目的编译过程。通过`CMakeLists.txt`文件定义项目结构和配置选项。
#### 创建基本的CMakeLists.txt文件
对于简单的程序来说,创建一个有效的`CMakeLists.txt`只需要几行代码:
```cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0 DESCRIPTION "A simple project")
add_executable(mainApp main.cpp)
```
上述命令设置了最低版本需求、指定了工程名称以及添加了一个可执行目标[^2]。
#### 设置源码目录与二进制输出位置
为了更好地控制生成文件的位置,可以在顶层`CMakeLists.txt`中指定这些参数:
```cmake
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
```
这会使得所有的运行时产物被放置到特定子目录下。
#### 添加头文件搜索路径
当项目依赖外部库时,可能需要告知编译器去哪里查找包含文件。可以通过如下方式实现:
```cmake
include_directories(/path/to/external/library/include)
```
此操作增加了全局范围内的头文件查找路径列表[^5]。
#### 链接第三方静态或共享库
如果应用程序还需要链接某些预编译好的库,则应使用下面的形式来声明这种关系:
```cmake
target_link_libraries(mainApp /usr/local/lib/libexample.so)
```
这里假设存在名为`libexample.so`的动态库位于给定路径上,并将其关联至之前定义的目标`mainApp`。
#### 查找并使用已安装包
利用内置函数简化对外部组件的支持工作量。例如寻找OpenCV库的方法如下所示:
```cmake
find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui)
if (OpenCV_FOUND)
message(STATUS "Found OpenCV version: ${OpenCV_VERSION}")
endif()
```
这段脚本尝试定位必要的模块,并打印发现的信息;一旦成功找到所需部分即可继续下一步骤。
#### 完整实例展示
综合以上知识点,给出一个完整的例子作为参考:
```cmake
# 指明所需的最小CMake版本
cmake_minimum_required(VERSION 3.10)
# 设立工程项目基本信息
project(DemoApplication VERSION 0.1 LANGUAGES CXX)
# 调整输出物存储地点
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
# 寻求OpenCV支持
find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui)
if (OpenCV_FOUND)
add_definitions(-DUSE_OPENCV=ON)
else()
add_definitions(-DUSE_OPENCV=OFF)
endif()
# 加入额外的头文件夹
include_directories(${OpenCV_INCLUDE_DIRS})
# 构建最终的应用程序
add_executable(demo demo.cpp)
# 连接到所选中的库项
target_link_libraries(demo PRIVATE ${OpenCV_LIBS})
```
该模板展示了如何集成多个特性于一体,形成一套较为完善的自动化构建流程。
阅读全文
相关推荐


















