欢迎光临散文网 会员登陆 & 注册

Cmake基础教程(一)

2023-08-20 17:55 作者:上岸的小浣熊  | 我要投稿

1、基础信息

cmake_minimum_required(VERSION 3.23)    # 所需cmake的最低版本

set(CMAKE_C_STANDARD 99)       # c/cxx语言编译标准

project(test)          # 项目名称 / 库名称

      上述3条信息是CMakeLists中最基础的,也是必须的3条信息。

2、定义变量

      定义变量使用的是set变量,同时通过设置变量,可以达到简化CMake表达的作用。使用方法:set(变量名 变量值)。例如:

set(APPNAME test)       # 设置可执行程序名
set(LIBPATH ${PROJECT_SOURCE_DIR}/lib)     # 设置静态库路径( ${ } 为变量引用方式)

3、添加并构建子目录

      add_subdirectory:添加并构建子目录。共有3个参数:source_dir 为必选参数,该参数指定一个子目录 (绝对路径 / 相对路径),同时子目录下应该包含一个 CMakeLists.txt文件和代码文件用于构建。binary_dir 为可选参数,指定输出文件的存放目录,默认为source_dir。EXCLUDE_FROM_ALL 为可选参数,子目录下的目标不会被父目录下的目标文件包含进去,父目录的CMakeLists.txt不会构建子目录的目标文件,必须在子目录下显式去构建。

4、链接库

       CMake 中链接库主要有两个命令:link_libraries 和 target_link_libraries

       link_libraries 用于链接静态库,包含库名和路径两个变量,其中,库名可以使用全称(libxx.a),也可以使用简称 (掐头去尾xx),如果静态库是第三方的,可以使用 link_directories将静态库路径指定出来,避免出现找不到静态库的情况。

      target_link_libraries 用于链接动态库,包含目标名、库访问权限、库名三个变量。target (目标) 可以是一个源文件、动态库、可执行文件。权限有PUBLIC(允许第三方访问)、PRIVATE(不允许第三方访问)、INTERFACE(不链接,只导出符号)三种,默认为PUBLIC,

      当访问权限为 PUBLIC 时,动态库的链接具有传递性:当动态库 A 同时链接了动态库 B 和 C,那么在下次只需要链接动态库 A,就可以使用 B 和 C 中的函数了。

      link_libraries 置于生成目标之前,target_link_libraries 置于生成目标之后。

5、包含头文件目录

      使用 include_directories 包含一个或多个头文件目录,可以是相对路径,也可以是绝对路径。

常见的路径表达方式:

①  CMAKE_BINARY_DIR / PROJECT_BINARY_DIR:生成的库、可执行文件等的存放位置,工程顶层目录(in) / 工程编译发生的目录(out)。

② CMAKE_SOURCE_DIR / PROJECT_SOURCE_DIR:工程顶层目录

③ CMAKE_CURRENT_SOURCE_DIR:当前CMakeLists.txt 所在的路径。

④ CMAKE_CURRENT_BINARY_DIR:当前CMakeLists.txt 所在的构建目录的路径。

⑤ CMAKE_LIBRARY_OUTPUT_DIRECTORY:库文件的输出目录。

⑥ CMAKE_RUNTIME_OUTPUT_DIRECTORY:可执行文件的输出目录。

Cmake基础教程(一)的评论 (共 条)

分享到微博请遵守国家法律