CMake的简单示例

一、CMake的介绍

CMake是跨平台的自动化构建系统生成工具,文件是CMakeLists.txt

二、简单的CMake脚本

# CMake最低版本
cmake_minimun_required(VERSION 3.0)
# 工程名称
project(MyProject)
# 头文件路径,对应makefile的-I
include_directories(${PROJECT_SOURCE_DIR}/include)
# 指定路径搜索源文件-方法1
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
# 指定路径搜索源文件-方法2
file(GLOB SRC ${PROJECT_SOURCE_DIR}/src/*.c)
# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
# 指定链接库文件路径(动态+静态)
link_directories(${PROJECT_SOURCE_DIR}/lib)
# 链接静态库
link_libraries(calc)
# 设置生成文件路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
# 设置可执行程序
add_executable(app ${SRC})
# 链接动态库,也可以链接静态库
target_link_libraries(app calc)
# 设置库文件的存储路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 生成静态库
add_library(calc STATIC ${SRC})
# 生成动态库
add_library(calc SHARED ${SRC})

三、脚本介绍

  1. PROJECT_SOURCE_DIR表示CMakeLists.txt的路径
  2. 链接动态库时,将target_link_libraries放到add_executable后边

四、其他语法介绍

# STATUS 非重要消息
# FATAL_ERROR 致命错误CMake退出
message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)
# 使用set做变量拼接
set(变量名1 ${变量名1} ${变量名2} ...)
# 使用list做字符串拼接
list(APPEND <list> [<element> ...])
# 使用list做字符串移除
list(REMOVE_ITEM <list> <value> [<value> ...])
# CMake中定义宏
add_definitions(-DDEBUG)

五、嵌套的CMake

父目录的CMake
add_subdirectory(子目录)
# 这样对父目录的CMakeLists.txt执行CMake,会调用到子目录的CMakeLists.txt,同时父目录的CMakeLists.txt定义的变量在子目录中均可以看到并使用

六、静态库链接静态库

在CMake制作库文件的时候,使用link_directories和link_libraries指定链接目录和链接库,这样两个库都被打包在一起
posted @ 2025-08-11 18:32  gramming  阅读(13)  评论(0)    收藏  举报