NDK CMakeList常用命令

1.cmake_minimum_required(VERSION 3.4.1) # 指定最低支持版本
2.aux_source_directory(. DIR_SRCS)
查找(第一个参数.)当前目录所有源文件,并将源文件名称列表保存到(第二个参数)DIR_SRCS变量
不能查找字目录
3.add_library
添加一个库名为<name>
指定STATIC,SHAREN,MODULE参数来指定库的类型。STATIC:静态库;SHARED:动态库,MOULE:在使用dyld的系统有效,若不支持dyld,等同于SHARED。
EXCLUDE_FROM_ALL:标识该库不会被默认构建。
source1 source2…… sourceN:用来指定库的源文件

add_library(<name> [STATIC | SHARED | MODULE] 
[EXCLUDE_FROM_ALL] source1 source2 ……sourceN}

导入预编译库
添加一个已存在的预编译库,名为<name>。
一般配合set_target_properties使用

add_library(test SHARED IMPORTED)
  set_target_properties(
  test #指名目标库名
  PROPERTIES IMPORTED_LOCATION #指明要设置的参  数库路径/${ANDROID_API}/libtest.so #导入库的路径
)

4.设置CMake变量

#设置可执行文件的输出路径(EXCUTABLE_OUTPUT_PATH是全局变量)
set(EXECUTABLE_OUTPUT_PATH[output_path])

#设置库文件的输出路径(LIBRARY_OUTPUT_PTAH 是全局变量)
set(LIBRARY_OUTPUT_PTAH [output_path])

#设置C++编译参数(CMAKE_CXX_FLAGSs是全局变量)
set(CMAKE_CXX_FLAGS "-Wall std=c++11")

#设置源文件集合(SOURCE_FILES是本地变量即自定义变量)
set(SOURCE_FILES main.cpp test.cpp ...)

5.设置头文件目录,相当于g++选项中的-i参数

#可以用相对或绝对路径,也可以用自定义的变量值
include_directories(./include ${MY_INCLUDE})

6.添加可执行文件

add_executable(<name> ${SRC_LIST})

7.将若干个库连接到目标库文件。连接的顺序应当符合gcc链接顺序的规则,被链接的库放在依赖他的库的后面,即如果上面的命令,lib1依赖于lib2,lib2又依赖于lib3,则在下面命令中必须严格按照lib1 lib2 lib3 的顺序排列,否则会报错

target_link_libraries(<name> lib1 lib2 lib3)
#如果出现互相依赖的静态库,CMake会允许依赖途中的包含循环依赖,如:
add_library(A STATIC a.c)
add_library(B STATIC b.c)
target_link_libraries(A B)
target_link_libraries(B A)
add_executable(main main.c)
target_link_libraries(main A)

8.为当前路径以及子目录的源文件加入由-D引入的define flag

add_definitions(-DFOO -DDEBUG ...)

9.如果当前目录下还有子目录时可以使用add_subdirectory,子目录中也需要包含有CMakeLists.text

#sub_dir指定包含CMakeLists.txt和源码文件的子目录位置
#binary_dir是输入路径,一般可以不指定
add_subdirecroty(sub_dir [binary_dir])

10.文件操作命令

#将message 写入filename文件中,会覆盖文件原有内容
file(WRITE filename "message")
#将message写入filename文件中,会追加在文件末尾
file(APPEND filename "message")
#从filename文件中读取内容并存储到var 变量中,如果指定了numBytes 和offset
#则从offset处开始最多读numBytes个字节,另外如果指定了HEX 参数,则内容会议十六进制形式存储在var变量中
file(READ filename var [LIMIT numBytes] [OFFSET offset] [HEX])
#重命名文件
file(RENAME <oldname> <newname>)
#删除文件,等于rm
file(REMOVE [file1 ...])
#递归的执行删除文件命令,等于 rm -r
file(REMOVE_RECURSE [file1 ...])
#根据指定的url下载文件
#timeout 超时时间;下载的状态会保留在status中;下载日志会被保存到log;sum指定所下载文件逾期的MD5值,如果指定会自动进行比对,
#如果不一致,则返回一个错误;SHOW_PROGRESS,进度信息会议状态信息的形式被打印出来
file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log] [EXPECTED_MD5 sun] [SHOW_PROGRESS])
#创建目录
file(MAKE_DIRECTORY [dir1 dir2 ...])
#会把path转换为以unix的/开头的cmake风格路径,保存在result中
file(TO_CMAKE_PATH path result)
#它会把cmake风格的路径转换为本地路径风格:windows下用"\",而unix下用"/"
file(TO_NATIVE_PATH path result)
#将会为所有匹配查询表达式的文件生成一个文件list,并将该list存储进变量variable里,如果一个表达式指定了RELATIVE,返回的结果将会相对于给定路径的相对路径,查询表达式例子:*.cxx,*.vt?
#NOTE:按照官方文档的说法,不建议使用file的GLOB指令来手机工程的源文件
file(GLOB variable [RELATIVE path] [globbing expressions]...)

11.设置某个路径的一种属性
prop1,prop2代表属性,取值为:INCLUDE_DIRECTORIES LINK_DIRECTORIES INCLUDE_REGULAR_EXPRESSION ADDITIONAL_MAKE_CLEAN_FILES

set_directory_properties(PROPERTIES prop1 value1 prop2 value2)

12.在给定的作用域内设置一个命名的属性,PROPERTY参数是必须的,第一个参数决定了属性可以影响的作用域:
GLOBAL: 全局作用域
DIRECTORY:默认当前路径,也可以用[dir]指定路径
TARGET:目标作用域,可以是0个活多个已有目标
SOURCE:源文件作用域,可以是0个活多个源文件
TEST:测试作用域,可以是0个或多个已有的测试
CACHE:必须指定0个或多个cache中已有的条目

set_property(<GLOBAL |DIRECTORY [dir] | TARGET [traget ...] | SOURCE [src1 ...] | TEST [test1 ...] | CACHE [entry1 ...]> [APPEND] PROPERTY<name> [value ...])
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,320评论 0 9
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,383评论 0 5
  • 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) CM...
    小明yz阅读 2,761评论 0 8
  • CMake 全称“cross platform make”,是开源、跨平台的自动化构建系统。CMake 由 Kit...
    神齐阅读 4,117评论 0 6
  • 为了将C/C++代码转换为可以在硬件上运行的程序,需要经过编译和链接。编译是将高级语言所写的源程序翻译成等价的机器...
    WalkeR_ZG阅读 9,717评论 0 15