Cmake常用命令(四)

本文介绍了CMake中的关键指令,如include_directories用于添加头文件搜索路径,target_link_libraries连接库文件,以及add_library和add_executable的库与可执行文件构建。同时涵盖了install指令的多用途安装规则。
摘要由CSDN通过智能技术生成

include_directories

将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。

它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用

include_directories ([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

编译时的路径搜索必须精确指定文件夹,makefile不会递归搜索子文件夹

Afterbefore 关键字控制的是添加文件夹到列表的最后还是最前,makefile在搜索头文件时会按照该列表的顺序进行搜索,只要找到便停止搜索。

target_include_directories

指定目标依赖的头文件路径,功能和include_directories类似。不同的是include_directories是一个全局参数,所以的目标文件和下级CMakeList的目标文件共用;而target_include_directories则是单独针对某个对象的设置。

target_include_directories(<target> [SYSTEM] [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

add_library

添加一个从source列表列出的文件构建而来的目标名为name的库。

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])

name必须全局唯一

构建库的源文件可以直接指定,也可以后续使用target_sources()指定

STATIC(静态库) SHARED(动态库) MODULE(模块库)用来指定库的类型。

-使用STATIC构建生成静态库(name.a),使用SHARED构建生成动态库(name.so)

EXCLUDE_FROM_ALL:加了EXCLUDE_FROM_ALL属性的target在默认编译的时候,不会被编译,除非它被别的可执行文件或者库文件所依赖。

生成的库文件会放到当前编译的目录内。

add_executable

生成可执行文件

add_executable (<name> [WIN32] [MACOSX_BUNDLE]
      [EXCLUDE_FROM_ALL]
      [source1] [source2 ...])

source*是依赖的源文件,除了在该命令中指定外,还可以通target_sources命令添加依赖的源文件

target_sources

编译目标文件所依赖的源文件,目标文件是由add_executable()add_library()创建的

target_sources(<target>
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

target_link_libraries

该指令的作用为将目标文件与库文件进行链接

target_link_libraries(<target> [item1] [item2] [...]
                      [[debug|optimized|general] <item>] ...)

上述指令中的<target>是指通过add_executable()add_library()指令生成已经创建的目标文件,而[item]表示依赖的库文件

link_directories

添加需要链接的库文件目录

link_directories(directory1 directory2 ...)

它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。

LINK_LIBRARIES

添加需要链接的库文件路径,注意这里是全路径

LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

也可以写成:

LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

Install

install用于指定在安装时运行的规则。它可以用来安装很多内容,可以包括目标二进制、动态库、静态库以及文件、目录、脚本等

install(TARGETS <target>... [...]) 可执行文件,库文件,头文件

install({FILES | PROGRAMS} <file>... [...]) -- FILES为普通的文本文件,PROGRAMS指的是非目标文件的可执行程序(如脚本文件)

install(DIRECTORY <dir>... [...]) 目录

install(SCRIPT <file> [...]) -- 在安装过程中调用给定的CMake脚本文件(.cmake脚本文件)

install(CODE <code> [...]) -- 在安装过程中调用给定的CMake代码

install(EXPORT <export-name> [...])

有时候,也会用到一个非常有用的变量CMAKE_INSTALL_PREFIX用于指定cmake install时的相对地址前缀

add_subdirectory

添加一个子目录并构建该子目录。

add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])

source_dir必选参数。该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。子目录可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前目录的一个相对路径。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值