文章目录
前言
以上就是今天要讲的内容,本文简单介绍了CMake中CMakeLists.txt的基本语法。
CMake
CMake 是一个跨平台的安装(编译)工具,能够使用简单的声明性语句描述所有平台的安装(编译过程)。在 CMake 中,构建系统的描述是通过编写 CMakeLists.txt 文件来实现的。以下是 CMake 中常用的一些规则和指令的详细介绍:
基本指令
最低版本要求
cmake_minimum_required(VERSION 3.10)
指定 CMake 最低版本要求。
项目名称
project(MyProject)
设置项目名称,并隐式定义了几个变量,如 PROJECT_SOURCE_DIR 和 PROJECT_BINARY_DIR。
编译选项
为编译器添加全局编译选项
指定编译选项
add_compile_options()
为编译器添加全局编译选项。
预处理定义
add_definitions(-DFOO -DBAR)
添加预处理定义。
标准版本
set(CMAKE_CXX_STANDARD 11)
设置 C++ 的标准版本。
指定其源文件
指定可执行文件及其源文件
指定源文件
add_executable(myapp main.cpp src/foo.cpp)
指定要编译的可执行文件及其源文件。
指定库文件及其源文件
add_library(mylib STATIC src/foo.cpp src/bar.cpp)
指定要编译的库及其源文件,可以是 STATIC, SHARED 或 MODULE 类型。
指定包含目录
添加头文件搜索路径
指定包含目录
include_directories(/usr/local/include)
添加头文件搜索路径。
添加特定目标搜索路径
target_include_directories(mylib PUBLIC /usr/local/include)
为特定目标添加头文件搜索路径。
指定链接库
添加库文件的搜索路径
指定链接库
link_directories(/usr/local/lib)
添加库文件搜索路径。
指定可执行文件或需要链接的库
target_link_libraries(myapp mylib)
指定可执行文件或库需要链接的库。
控制构建流程
添加子目录、指定输出目录
控制构建流程
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
添加一个子目录,并可以指定构建输出目录。
查找源文件、并存储
aux_source_directory(. SRC_LIST)
查找指定目录下的所有源文件,并将列表存储在一个变量中。
安装规则
安装目标到指定路径
安装规则
install(TARGETS mylib myapp DESTINATION bin)
安装目标到指定路径。
安装文件到指定路径
install(FILES COPYRIGHT README DESTINATION share/doc/cmake)
安装文件到指定路径。
查找包
查找并加载外部包
查找包
find_package(PackageName [version] [EXACT] [QUIET] [REQUIRED])
查找并加载外部包的设置。
查找库文件
find_library(LIBRARY_NAME NAMES libraryname PATHS /usr/local/lib)
查找库文件。
逻辑控制
逻辑控制
if(MSVC)
检查是否在 Microsoft Visual C++ 编译器下。
elseif(${CMAKE_BUILD_TYPE} MATCHES Debug)
检查构建类型是否为 Debug。
else()
否则。
endif()
结束 if 语句。
宏和函数
宏和函数
macro()
定义宏,宏调用时会直接展开代码。
function()
定义函数,函数调用时会传递参数。
属性设置
属性设置
set_target_properties(target1 target2 … PROPERTIES prop1 value1 prop2 value2 …)
设置目标的属性。
##其他指令
其他指令
option(USE_SOME_FEATURE “Use some feature” ON)
提供一个选项,用户可以选择是否启用。
打印消息
message(STATUS “This is a status message”)
打印消息,可以是 STATUS, SEND_ERROR, FATAL_ERROR 等。
这些规则和指令只是 CMake 中的冰山一角。CMake 的功能非常强大,支持模块化、跨平台构建,以及许多高级特性,如生成器表达式和自定义命令。CMakeLists.txt 文件可以根据项目的复杂度变得非常复杂,因此理解和掌握这些基本规则是编写高效 CMake 脚本的关键。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了CMake中CMakeLists.txt的基本语法。