CMake构建工程基本要素
在使用 CMake 构建项目时,CMakeLists.txt
文件是用来定义构建流程的核心文件,通常它需要完成以下设置:
- 项目基本上配置
- 预处理相关设置
- 编译选项设置
- 连接选项设置
- 工程部署设置
CMake 最低版本要求: 指定项目需要的 CMake 最低版本。例如:
cmake_minimum_required(VERSION 3.10)
项目名称与版本: 使用 project
命令定义项目的名称及版本:
project(MyProject VERSION 1.0)
编译器标准: 设置需要的编译器标准,特别是 C++ 项目中:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
源文件和头文件: 定义需要编译的源文件和相关的头文件:
#添加可执行程序
add_executable(MyExecutable main.cpp other.cpp)
#添加库
add_library(my_shared_lib SHAREDlibrary.cpp
)
添加包含路径: 使用 include_directories
或 target_include_directories
来指定头文件路径:
target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)
外部库依赖: 如果项目依赖于外部库,需要通过 find_package
、find_library
等命令来引入库。例如:
find_package(OpenGL REQUIRED)
target_link_libraries(MyExecutable OpenGL::GL)
库文件链接: 使用 target_link_libraries
链接需要的库:
target_link_libraries(MyExecutable PRIVATE SomeLibrary)
编译选项: 设置编译器选项,如警告级别、优化选项等:
target_compile_options(MyExecutable PRIVATE -Wall -O3)
自定义变量和选项: 可以定义项目所需的变量或配置选项:
option(BUILD_TESTS "Build the tests" ON)
安装规则: 指定项目安装时,文件的目标路径:
install(TARGETS MyExecutable DESTINATION bin)
install(FILES myheader.h DESTINATION include)
条件编译: 通过 if/else
等命令根据条件进行编译设置:
if(WIN32)add_definitions(-DWIN32_LEAN_AND_MEAN)
endif()
构建子目录: 对于大型项目,可以通过 add_subdirectory
添加子目录中的 CMakeLists.txt
:
add_subdirectory(src)
add_subdirectory(test)