常用命令
cmake_minimum_required(VERSION 3.4.1)
aux_source_dirction(. DIR_SRCS)
查找当前目录下所有源文件,并将源文件的名称保存到变量 DIR_SRCS中。 且不能查找子目录
添加库
add_library(<name> [STATIC|SHARED|MODULE] [
EXCLUDE_FROM_ALL] source1 source2 source3)
导入预编译库
add_library(<name> [STATIC|SHARED|MODULE|UNKNOWN] IMPORTED)
set_target_properties(<targetname> PROPERTIES IMPORTED_LOCATION 导入库的路径)
#以导入test库为例子
add_library(test SH/ARED IMPORTED)
set_target_properties(test PROPERTIES IMPORTED_LOCATON ${haha}/libtest.so)
常用命令set
1.设置可执行文件的输出路径
set(EXCUTABLE_OUTPUT_PATH [output_path])
2.设置库文件的输出路径
set(LIBRARY_OUTPUT_PATH)
3.设置C++编译参数
set(CAMKE_CXX_FLAGS "-Wall std=c++11")
4.设置源文件集合
set(SOURCE_FILES main.cpp test.cpp)
include_directories
include_dirctories(./include ${MY_INCLUDE})
设置头文件目录的,相当于g++ 中的 -I参数选项
add_excutable
添加可执行文件
add_excutable(<name> ${src_list})
target_link_libraries
target_link_libraries(<name> lib1 lib2 lib3)
1.将若干个库连接到目标文件
2.被连接的库是有顺序的。 lib1 依赖于lib2 ,lib2 依赖于lib3
3.如果静态库出现相互依赖,cmake允许环形依赖
add_library(A STATIC a.c)
add_library(B STATIC b.c)
target_link_libraries(A B)
target_link_libraries(B A)
add_excutable(main main.c)
target_link_libraries(main A)
4.第一个参数为目标库的名字
add_definitions ??
add_definitions(-DFOO -DDEBUG ...)
为当前目录及子目录下的源文件加入有 -D引入的define flag
add_subdirectory
add_subdirectory(sub_dir [binary_dir])
如果当前目录下还有子目录,可以使用该命令,但是子目录还需要有CMakeLists.txt
file 命令
set_directory_properties
set_directory_properties(PROPERTIES prop1 value1 prop2 valu2)
prop:INCLUDE_DIRECTORIES LINK_DIRECTORIES INCLUDE_REGULAR_EXPRESSION ADDTIONAL_MAKE_CLREAN_FILES
set_property
在给定的作用域内设置一个命名属性
set_property(<GLOBAL|
DIRECTORY [dir]|
TARGET [target ... ] | SOURCE [src1 ...]|
TEST [tes1]|
CACHE [entry1 ...]>
[APPEND]
property <name> [value ...])
多个源文件怎么处理
当前目录下
aux_source_directory(. DIR_SCRS)
或者
file(GLOB DIR_SRCS *.c *.cpp)
add_library(native-lib SHARED ${DIR_SRCS})
多个目录下
场景 主目录和 子目录child
#主目录的CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.4.1)
#将当前目录下的源文件存入变量DIR_SRCS中年
aux_source_directory(. DIR_SRCS)
#将声明当前的库
add_library(native-lib SHARED ${DIR_SRCS})
#将子目录的库声明
add_subdirectory(child)
#连接库
target_link_libraries(native-lib child)
#child的CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.4.1)
aux_source_directory(. DIR_LIB_SRCS)
add_library(child SHARED ${DIR_LIB_SRCS})
添加预编译库(android 6.0之前)
cmake_minimum_required(VERSION 3.4.1)
add_library(import-lib SHARED IMPORTED)
set_target_properties(import-lib PROPERTIES IMPORTED_LOCATION ./xxx/lib-import-lib.so)
aux_source_directory(. SRCS)
add_library(native-lib SHARED ${SRCS})
target_link_libraries(native-lib import-lib)
添加预编译库(android 6.0之后)
set(CMAKE_C_FLAGS "${CAMKE_C_FLAGS} -l [so所在目录]")
其实就是给CMAKE_C_FLAGS 追加-l参数
添加头文件
cmake_minimu_required(VERSION 3.4.1)
include_directorys(<头文件目录>)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -l [so文件目录]")
aux_source_direction(. SRCS)
add_library(native-lib SHARED ${SRCS})
target_link_libraries(native-lib improted-lib)
build.gradle中的配置