type
status
date
slug
summary
tags
category
icon
password
构建可执行程序
如:
或者源码目录:
构建动态链接库/静态库
STATIC
:表示静态库,如libname.a
SHARED
:表示动态链接库,如libname.dylib
MODULE
:表示可以用类似dlopen
得方法动态加载库,如libname.so
构建出来的库名字会自动加上
lib
前缀,如libname.a
libname.dylib
libname.so
如:
添加头文件
include_dir
为.h
文件所在的文件夹添加源文件
查找把
./src
下所有源文件,并保存到变量DIR_SOURCES
中,后面可以使用${DIR_SOURCES}
表示.需要注意的地方是:
aux_source_directory
不会递归包含子目录,仅包含指定的目录.
- 当添加源文件时,如需重新编译,得重新运行cmake
还可以使用
CMAKE_CURRENT_LIST_DIR
内置变量:添加子目录
除了写helloworld,一般都需要配置多个源码目录,这个时候可以使用
add_subdirectory
命令,其中source_dir
表示子目录中CMakeList.txt所在的路径,binary_dir
表示输出目录.查找依赖库
- 通过
link_directories
(极少使用)
linker会在这些定义的目录里查找依赖的库.如lib文件夹下放置一个
libskia.so
库文件:最后链接的时候:
这个时候,会自动到上面包含的lib文件下去寻找libskia.so(或者libskia.a,libskia.dylib)文件.
使用XCode等项目生成器需要根据架构动态切换依赖库,或者库本身依赖私库等情况会使用这个命令,一般使用find_library()替换.
- 通过
find_library
如果库被找到,结果会被存储到变量
VAR
中.如果没有找到库文件,则结果会被存储到<VAR>-NOTFOUND
.如:- 通过
find_package
cmake中自带了一些cmake脚本,通过
cmake --help-module-list
命令即可查看.拿libpng举例:如果遇到已有脚本存在,但是就是无法找到的情况,无需在此浪费时间,换一种查找方法即可.
链接库文件
这其中item可以是下面的任何一种:
- 库名(不带
lib
前缀,不带后缀)
- 库文件的完整路径
- 表达式
自定义输出路径
- 指定执行文件输出路径
- 指定Debug/Release版本
- 指定库文件输出路径
- 指定Debug/Release版本
- 指定Debug/Release版本后缀名
内置变量
- CMAKE_CURRENT_LIST_DIR
当前CMakeList.txt所在目录
- PROJECT_NAME
项目名
PROJECT_SOURCE_DIR
源码目录
- 作者:姜康
- 链接:https://jiangkang.tech/article/e4af61e7-e3ed-4559-b80c-b01f3c039bcb
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。