使用cmake构建C++工程的时候,需要配置好cmake文件,该文件的名字严格区分大小写,一定是CMakeLists.txt。然后,需要在txt文件写一些指令,cmake才正确可以执行。在一个cmake文件中常用到的几个函数在下面被介绍:
1. 版本号限制语句--cmake_minimum_required()
cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])
作用:该命令指明了对cmake的最低(高)版本的要求。
参数说明:VERSION:指明后面的参数为camke的版本号,后面跟着cmake的版本。
例如:下面的例子指定了cmake的最低版本要求。
cmake_minimum_required(VERSION 3.10)
下面的例子指定了cmake的最低版本和最高版本的要求。
cmake_minimum_required (VERSION 3.10...3.15)
通常一些软件在更新的时候,都是兼容之前的版本的,所以在CMakeLists.txt的文件夹中对于版本的要求只要说明最低版本要求即可。
2 指定工程名--project()
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project-description-string>]
[HOMEPAGE_URL <url-string>]
[LANGUAGES <language-name>...])
作用:用来指定cmake工程的名字,此外还可以指定版本号,项目描述,主页链接以及编译所使用的语言。
参数说明:
<PROJECT-NAME>:必选,用来设置工程的名字,设置后,会把设置的值存在。CMAKE_PROJECT_NAME
变量中。
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]:可选,和上面的版本号限制语句里面的一样。
[DESCRIPTION <project-description-string>]:可选,项目描述。
[HOMEPAGE_URL <url-string>]:可选,工程主页url。
[LANGUAGES <language-name>...]):可选,工程使用的语言。
#设置项目、项目名称、版本、描述、语言
project(
MyProject_name
VERSION 3.10
DESCRIPTION "简单的项目描述"
LANGUAGES CXX
)
3 生成目标可执行文件--add_executable()
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
作用:使用指定的源文件生成目标可执行文件,即有source列出的源文件构建成名字为name的目标可执行文件。
参数说明:
<name> [WIN32] [MACOSX_BUNDLE]:必选,生成目标可执行文件的名字
[source1] [source2 ...]:必须,构建需要的.cpp源文件
add_executable(myproject_name main.cpp)
4 为指定的目标需要包含的头文件目录--target_include_directories()
target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
作用:为目标添加头文件目录,将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。
参数说明:<target>必须是由add_executable()或add_library()之类的命令创建的目标对象的名字。
<INTERFACE|PUBLIC|PRIVATE>:必选,用来指定target的中iuclude的属性。
在下面的例子中,为了找到include中的文件,返回本文件夹的上一个文件夹,进入other_dir文件寻找。
target_include_directories(myproject_name PUBLIC "../other_dir")
5 为目标添加库文件目录--target_link_directories()
target_link_directories(myproject_name PUBLIC "../account_dir/build")
作用:为构建的目标添加库文件目录,C++中库通常指的是动态链接库或者静态链接库。将前面建立好的库,添加到目标文件中。
6 为目标添加库--target_link_libraries()
target_link_libraries(myproject_name Account)
作用:将Account库添加到myprojecct_name文件中。