以下是最基本的格式:

# filename: CMakeLists.txt

# cmake最低版本要求3.10
cmake_minimum_required(VERSION 3.10)

# 该项目名称为OpenGLStudy,该项目编程语言C++
project(CMakeStudy VERSION 1.0 
                   DESCRIPTION "学习CMake构建文件编写"
                   HOMEPAGE_URL  "https://lieryangstack.github.io/"
                   LANGUAGES C CXX
                   )

add_executable(main mian.cpp)

以上的最低版本要求和project是必须的,如果是子目录的CMakeLists.txt则不需要这两部分(project一个项目只能有一个)。

下面所讲到的命令链接:https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html

1 cmake_minimum_required()

cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])

1.1 示例

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

FATAL_ERROR:FATAL_ERROR 选项在 CMake 2.6 及更高版本中被接受但被忽略。它应当被指定,以便 CMake 2.4 及更低版本在遇到错误时不仅仅是发出警告,而是失败并报错。

在2.6版本后已经可以忽略了。

2 project()

project(<PROJECT-NAME> [<language-name>...])
# 或者
project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])

LANGUAGES:支持语言是 C, CXX (i.e. C++), CSharp (i.e. C#), CUDA, OBJC (i.e. Objective-C), OBJCXX (i.e. Objective-C++), Fortran, HIP, ISPC, Swift, ASM, ASM_NASM, ASM_MARMASM, ASM_MASM, and ASM-ATT。

注意是:CXX,CSharp(不是括号里面的例如)。

2.1 示例

project(CMakeStudy VERSION 1.0 
                   DESCRIPTION "学习CMake构建文件编写"
                   HOMEPAGE_URL "https://lieryangstack.github.io/"
                   LANGUAGES C CXX
                   )

3 file()

file(GLOB <variable> [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS] <globbing-expressions>...)

4 message()

打印输出信息

message([<mode>] "message text" ...)

5 add_executable()

生成可执行文件

add_executable(<name> <options>... <sources>...)

5.1 Sample01

# cmake最低版本要求3.10
cmake_minimum_required(VERSION 3.10)

# 该项目名称为OpenGLStudy,该项目编程语言C++
project(CMakeStudy VERSION 1.0 
                   DESCRIPTION "学习CMake构建文件编写"
                   HOMEPAGE_URL  "https://lieryangstack.github.io/"
                   LANGUAGES C CXX
                   )

file(GLOB CPP_SOURCES "${PROJECT_SOURCE_DIR}/src/*.cpp")

file(GLOB C_SOURCES "${PROJECT_SOURCE_DIR}/src/*.c")                

message("CPP_SOURCES = " ${CPP_SOURCES})

# 有无引号都可以
message("C_SOURCES = " "${C_SOURCES}")

add_executable(main ${CPP_SOURCES} ${C_SOURCES})

6 add_library()

add_library(<name> [<type>] [EXCLUDE_FROM_ALL] <sources>...)

[<type>]

  • STATIC:生成静态库。

  • SHARED:生成动态库

  • MODULE:一个插件,可能不会被其他目标链接,但可以在运行时使用类似 dlopen 的功能动态加载。

6.1 示例

add_library(my_math STATIC mymath.cpp)