CMake 是一个跨平台的构建系统,它使用配置文件(CMakeLists.txt)来生成本机构建系统(如 Makefiles、Visual Studio 项目等)。下面是一些常用的 CMake 指令及其用法。
1.cmake_minimum_required
指定 CMake 的最低版本要求。
cmake_minimum_required(VERSION 3.10)
2.project
定义项目的名称和版本。
project(MyProject VERSION 1.0)
3.set
定义变量并设置其值。
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
4.add_executable
添加可执行文件。
add_executable(MyProject main.cpp)
5.add_library
添加库文件。
add_library(MyLib mylib.cpp)
6.target_link_libraries
指定目标文件需要链接的库。
target_link_libraries(MyProject PRIVATE MyLib)
7.include_directories
添加包含目录。
include_directories(${PROJECT_SOURCE_DIR}/include)
8.target_include_directories
指定目标文件的包含目录。
target_include_directories(MyLib PUBLIC ${PROJECT_SOURCE_DIR}/include)
9.add_subdirectory
添加子目录(通常用于包含另一个 CMakeLists.txt 文件)。
add_subdirectory(src)
10.find_package
查找并加载外部库或包。
find_package(OpenCV REQUIRED)
11.install
指定安装规则。
install(TARGETS MyProject DESTINATION bin)
install(FILES "${PROJECT_SOURCE_DIR}/include/mylib.h" DESTINATION include)
12.option
定义选项(布尔变量)。
option(BUILD_TESTS "Build the tests" ON)
13.if/else/endif
条件语句。
if(BUILD_TESTS)
add_subdirectory(tests)
endif()
14.message
打印消息。
message(STATUS "Building MyProject version ${MyProject_VERSION}")
15.configure_file
配置文件。
configure_file(config.h.in config.h)
示例项目的完整CMakeLists.txt
假设你的项目结构如下:
MyProject/
├── CMakeLists.txt
├── main.cpp
├── include/
│ └── mylib.h
└── src/
├── CMakeLists.txt
└── mylib.cpp
顶层CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
include_directories(${PROJECT_SOURCE_DIR}/include)
add_subdirectory(src)
add_executable(MyProject main.cpp)
target_link_libraries(MyProject PRIVATE MyLib)
src/CMakeLists.txt
add_library(MyLib mylib.cpp)
target_include_directories(MyLib PUBLIC ${PROJECT_SOURCE_DIR}/include)
构建和运行项目
- 创建并进入 build 目录:
mkdir build
cd build
- 运行 cmake 生成构建文件:
cmake ..
- 编译项目:
cmake --build .
- 运行生成的可执行文件:
./MyProject
通过这些指令和步骤,你可以使用 CMake 来组织和管理一个包含多个子目录的 C++ 项目。