CMamke 的官方文档:https://cmake.org/cmake/help/v3.0/manual/cmake-commands.7.html
1. cmake_minimum_required
设置 CMake 项目要求的最低的版本:
cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]]
[FATAL_ERROR])
比如,
cmake_minimum_required(VERSION 3.4.1)
2. include_directories
添加 include 文件的目录:
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
比如,
include_directories(opencv/jni/include src/main/cpp/include)
3. add_library
添加库到项目中,可指定库的名称,及其源码位置:
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
- 添加库和源代码到项目中,库的名称通过
<name>指定,并且应该是全局唯一的。 - STATIC, SHARED 和 MODULE 代表库的创建方式。STATIC 库是目标文件的归档文件,在链接其它目标的时候使用;SHARED 表示在运行时动态链接;MODULE 表示不会链接到其他项目,但是可能在运行时动态加载。默认是 STATIC 或者 SHARED 的,这取决于 BUILD_SHARED_LIBS。
第二种调用方式,用来加载项目之外的库文件。这个目标名字的作用域在它被创建的路径及以下有效,但可以通过 GLOBAL 拓展。关于导入库细节可以通过指定那些以 IMPORTED_ 的属性设置来指定。其中最重要的属性是 IMPORTED_LOCATION(以及它的具体配置版本,IMPORTED_LOCATION_<CONFIG>),它指定了主库文件在磁盘上的位置。
add_library(<name> <SHARED|STATIC|MODULE|UNKNOWN> IMPORTED
[GLOBAL])
此外,还有几种其他的调用方式:
add_library(<name> OBJECT <src>...)
add_library(<name> ALIAS <target>)
add_library(<name> INTERFACE [IMPORTED [GLOBAL]])
示例,
add_library(opencv_calib3d STATIC IMPORTED)
add_library(my_cropper SHARED src/main/cpp/img_proc.cpp)
4. set_target_properties
用来为目标设置编译属性:
set_target_properties(target1 target2 ...
PROPERTIES prop1 value1
prop2 value2 ...)
比如,下面的指令用来指定目标在磁盘上面的目录:
set_target_properties(opencv_calib3d PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/opencv/libs/${ANDROID_ABI}/libopencv_calib3d.a)
5. find_library
用来查找库。
# 简化版本
find_library (<VAR> name1 [path1 path2 ...])
# 一般版本
find_library (
<VAR>
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
6. target_link_libraries
该指令的作用为将目标文件与库文件进行链接:
target_link_libraries(<target> [item1] [item2] [...]
[[debug|optimized|general] <item>] ...)
上述指令中的 <target> 是指通过 add_executable() 和 add_library() 指令生成已经创建的目标文件,而 [item] 表示库文件没有后缀的名字。
比如,
target_link_libraries(
my_cropper
opencv_stitching)
本文总结了CMake的几个关键指令,包括cmake_minimum_required设置项目所需的CMake版本,include_directories添加头文件目录,add_library用于创建静态或动态库,set_target_properties用于设置目标编译属性,find_library查找库文件,以及target_link_libraries将目标文件与库文件链接。这些指令在Android NDK和JNI开发中尤为常见。
1万+

被折叠的 条评论
为什么被折叠?



