CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安装(编译过程)。 能够输出各种各样的makefile或者project文件。CMake并不直接构建出最终的软件, 而是产生其他工具的脚本(如makefile),然后再依据这个工具的构建方式使用。
CMake是一个比make更高级的编译配置工具,它可以根据不同的平台、不同的编译器, 生成相应的makefile或vcproj项目,从而达到跨平台的目的。
Android Studio利用CMake生成的是ninja。ninja是一个小型的关注速度的构建系统。 我们不需要关心ninja的脚本,知道怎么配置CMake就可以了。
CMake其实是一个跨平台的支持产出各种不同的构建脚本的一个工具。
在Android Studio 2.2及以上,构建原生库的默认工具是CMake. 在项目中会存在一个CMakeLists.txt文件。
配置项释义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| cmake_minimum_required(VERSION 3.x.x)
project("ndk_cmake")
file(GLOB SOURCE *.cpp *.c)
add_library(native-lib SHARED
${SOURCE} )
find_library(log-lib log )
target_link_libraries(native-lib ${log-lib}
)
message(STATUS "Message1>>>>>>>>>>>>>>>>>>>>>>>>>>>>") message(STATUS "Message2>>>>>>>>>>>>>>>>>>>>>>>>>>>>") message(STATUS "Message3>>>>>>>>>>>>>>>>>>>>>>>>>>>>") message("10 OldCmakeVersion:output.txt, NewCmakeVersion:cmake_server_log.txt")
set(var 666)
message("var = ${var}")
unset(var) message("my_var = ${var}")
set(list_var 1 2 3 4 5)
set(list_var2 "1;2;3;4;5")
message("list_var = ${list_var}") message("list_var2 = ${list_var2}")
set(if_tap OFF) set(elseif_tap ON)
if(${if_tap}) message("if") elseif(${elseif_tap}) message("elseif") else(${if_tap}) message("else")
endif()
set(a "")
while(NOT a STREQUAL "xxx") set(a "${a}x") message(">>>>>>a = ${a}") endwhile()
break()命令可以跳出整个循环 continue()可以继续当前循环 ]]
foreach(item 1 2 3) message("1item = ${item}") endforeach(item)
foreach(item RANGE 2) message("2item = ${item}") endforeach(item)
foreach(item RANGE 1 6 2) message("3item = ${item}") endforeach(item)
set(list_va3 1 2 3)
foreach(item IN LISTS list_va3) message("4item = ${item}") endforeach(item)
function(num_method n1 n2 n3) message("call num_method method") message("n1 = ${n1}") message("n2 = ${n2}") message("n3 = ${n3}") message("ARGC = ${ARGC}") message("arg1 = ${ARGV0} arg2 = ${ARGV1} arg3 = ${ARGV2}") message("all args = ${ARGV}") endfunction(num_method) num_method(1 2 3)
|