二、CMake构建文件——编写
以下是最基本的格式:
# 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 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)