cmake_minimum_required(VERSION 3.4.1)
指定CMake最低版本,不加会编译报错
set(arg value)
自定义变量,引用变量方式${arg}
如修改系统的输出变量,生成的可执行文件将会在PROJECT_SOURCE_DIR中
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
常用变量有,
CMAKE_SOURCE_DIR:CMakeList.txt所在目录
PROJECT_SOURCE_DIR:工程源文件目录目录,常见如..app/src/main/cpp
CMAKE_CXX_FLAGS: 用户配置的编译器参数
ANDROID_ABI:对应的ABI架构,如armeabi-v7a文件夹下该值为armeabi-v7a
message(STATUS "打印的数据")
打印信息,存在于build_output.txt日志文件中,
一般测试变量、路径是否正确,类似于Java代码中的print方法
add_library
1、添加源代码生成.a或.so库(注意此处会生成新的库文件)
add_library(HELLO [STATIC/SHARED] hello.cpp) ,若 [STATIC/SHARED]不填写,据测试默认为STATIC
2、添加已有的或者第三方提供的.so或.a库(注意此处是已有的库文件)
add_library(faac [STATIC/SHARED] IMPORTED) ,IMPORTED告知CMake:faac是第三方导入的库,按路径去找
set_target_properties()
设置目标属性如:
1.指定导入库路径
set_target_properties(
HELLO
PROPERTIES IMPORTED_LOCATION //CMake中的关键字
import-lib/src/${ANDROID_ABI}/libHELLO.so//指定你要导入库的路径.
)
2.指定生成的库名称为hell0z注意生成的为libhell0z.so
set_target_properties(
HELLO PROPERTIES OUTPUT_NAME "hell0"
)
include_directories(includeDir1 includeDir2...)
指定原生或第三方库的头文件,为了CMake在编译阶段定位我们的头文件
add_executable(execName a.cpp,b.cpp...)
根据源文件生成可执行程序,名字为自定义的execName
aux_source_directory( ../a/dir Arg)
将目录“../a/dir”下所有源文件列表存放在Arg变量中
add_subdirectory(dir)
添加子目录结构,该子目录中可以存着子项目的CMakeList,以便切换子项目,需注掉上一个add_subdirectory,类似于vs中的WorkProject功能一个WorkProject可以包含多个可执行程序
target_link_libraries(obj lib1 lib2 lib3...)
将预构建或第三方库 lib1 lib2 lib3链接到obj中,对应预处理-编译=汇编-链接过程中的链接阶段,
那么obj中就可以正常调用库里的函数,obj即可以是可执行文件也可以是库