最低CMake版本要求
cmake_minimum_required(VERSION 3.10)
这指定了构建此项目所需的最低CMake版本。
可选,非必须,如果不加可能会有警告
项目名称和版本
project(MyProject VERSION 1.0.0)
语法:
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project-description-string>]
[HOMEPAGE_URL <url-string>]
[LANGUAGES <language-name>...])
定义工程名称,并可指定工程的版本、工程描述、web主页地址、支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。
指定C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
这些命令设置了C++标准版本为C++17,并且指定这一标准是必须的。
添加可执行文件
定义工程会生成一个可执行程序
add_executable(可执行程序名 源文件名称)
-
这里的可执行程序名和
project
中的项目名没有任何关系 -
源文件名可以是一个也可以是多个,如有多个可用空格或
;
间隔
# 样式1
add_executable(app add.c div.c main.c mult.c sub.c)
# 样式2
add_executable(app add.c;div.c;main.c;mult.c;sub.c)
这将创建一个名为MyExecutable
的可执行文件,其源代码来自main.cpp
。
添加库文件
如果你的项目中还有库,你可以在CMakeLists.txt
中使用add_library
命令来添加它们。例如,如果你有一个名为mylib
的静态库:
# 添加库
add_library(mylib STATIC mylib.c mylib.h)
然后,在添加可执行文件时,链接这个库:
# 添加可执行文件
add_executable(MyProject main.c)
# 链接库
target_link_libraries(MyProject PRIVATE mylib)
链接库
target_link_libraries(MyExecutable PRIVATE MyLibrary)
这将MyLibrary
库链接到MyExecutable
可执行文件。
包含目录
target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)
这告诉CMake在编译MyExecutable
时包含/include
目录。
选项
option(MY_OPTION "Description of my option" ON)
这定义了一个选项MY_OPTION
,可以通过-DMY_OPTION=ON
或-DMY_OPTION=OFF
在CMake命令行中设置。
条件语句
if(MY_OPTION)
# Do something if MY_OPTION is ON
else()
# Do something else if MY_OPTION is OFF
endif()
这根据MY_OPTION
的值执行不同的命令。
安装规则
install(TARGETS MyExecutable DESTINATION bin)
install(FILES myconfig.conf DESTINATION etc)
这设置了安装规则,使得MyExecutable
被安装到bin
目录,myconfig.conf
文件被安装到etc
目录。
生成配置文件
configure_file(config.h.in config.h)
这将根据config.h.in
中的设置生成config.h
文件,通常用于根据CMake选项配置源代码。
自定义变量
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMY_DEBUG_FLAG")
这为Debug构建类型添加了-DMY_DEBUG_FLAG
编译器标志。