我们在编译一个C/C++项目时有时候是需要我们阅读编译脚本来确定编译时的参数。CMakeLists.txt是比较常见的编译脚本,这里简单介绍几个常用的函数。
cmake_minimum_required
设置cmake的最小版本,位于CMakeList.txt的第一行,如果本机的CMake版本低于这个,则会报错,不进行编译,通常写法是:
cmake_minimum_required(VERSION 3.4.1)
VERSION 是必须的,后面为要求的CMake最低版本
set
赋值操作,用法如下:
set(SOURCE_DIR /src/main/cpp)
将 /src/main/cpp 赋值给 SOURCE_DIR 后面使用的时候可以通过 ${SOURCE_DIR} 的方式使用
#
# 表示注释
message
可以在编译时候向控制台输出信息,相当于log
# 会在控制台输出 SOURCE_DIR
message(SOURCE_DIR)
# 会在控制台输出 /src/main/cpp
message(${SOURCE_DIR})
include_directories
接收一个文件夹路径,将该文件夹中的头文件引入
# 引入了opencv的头文件
include_directories(/xxx/xxx/opencv/include)
link_directories
接收一个文件夹路径,将该文件夹中的库文件引入
与include_directories相对,这个引入的是库文件
# 引入了opencv的库文件
include_directories(/xxx/xxx/opencv/lib)
add_library
编译一个库
add_library(
# 所要生成库及目标库的名字
hululu_test
# 声明编译的库为静态库(STATIC)还是共享库(SHARED)
SHARED
# 以下为依赖的源码
xxx.c
xxy.cpp
...
)
target_link_libraries
声明目标库编译依赖的其他库
target_link_libraries(
# 目标库名称
hululu_test
# 以下为依赖的其他库
opencv
android
log
z
)
get_filename_component
将可以做文件路径转换
# 获取CMakeList.txt同级的gen文件的绝对路径,并赋值给GEN_PATH
get_filename_component(GEN_PATH gens REALPATH)
function
定义一个函数
# 顶一个一个函数名为test的函数,接收两个参数
function(test var1, var2)
...
# 函数定义结束标识
endfunction()