CMake 简介
CMake 是一个跨平台的构建系统,可以生成本地构建工具(如 Makefile 或 Visual Studio 项目)的配置文件。
基本用法
CMake 最小配置
创建一个 CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_executable(MyExecutable main.cpp)
cmake_minimum_required
:指定最低版本要求。project
:定义项目名称。add_executable
:添加可执行目标。
生成和构建
mkdir build
cd build
cmake ..
make
cmake ..
:在build
目录中生成构建文件。make
:构建项目。
添加多个源文件
set(SOURCES main.cpp file1.cpp file2.cpp)
add_executable(MyExecutable ${SOURCES})
包含头文件路径
include_directories(/path/to/include)
链接库
target_link_libraries(MyExecutable m)
m
:链接数学库,相当于-lm
。
使用外部库
查找库
find_package(SomeLibrary REQUIRED)
include_directories(${SomeLibrary_INCLUDE_DIRS})
target_link_libraries(MyExecutable ${SomeLibrary_LIBRARIES})
设置编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -g")
创建库
add_library(MyLibrary STATIC file1.cpp file2.cpp)
STATIC
:静态库。SHARED
:动态库。
使用配置选项
option(USE_FEATURE "Use special feature" ON)
if(USE_FEATURE)
add_definitions(-DUSE_FEATURE)
endif()
示例完整 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(SOURCES main.cpp file1.cpp file2.cpp)
add_executable(MyExecutable ${SOURCES})
include_directories(/path/to/include)
find_package(SomeLibrary REQUIRED)
include_directories(${SomeLibrary_INCLUDE_DIRS})
target_link_libraries(MyExecutable ${SomeLibrary_LIBRARIES})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -g")
option(USE_FEATURE "Use special feature" ON)
if(USE_FEATURE)
add_definitions(-DUSE_FEATURE)
endif()
总结
CMake 提供了灵活的项目配置和管理方式,可以方便地控制编译过程、管理依赖性和跨平台构建,是现代 C++ 项目的常用工具。