CMakeList 文件

使用AS创建一个C/C++ support的项目,会默认在app/src/main 目录下生产cpp目录,里面包含CMakeLists.txt 和 native-lib

.cpp.

下边为CMakeLists.txt去掉英文注释格式化后的内容

cmake_minimum_required(Version 3.4.1)

add_library(

          native-lib

          SHARED

          native-lib.cpp

)

find_library(

          log-lib

          log

)

target_link_libraries(

           native-lib

           ${log-lib}

)

 

常用命令:

cmake_minimum_required(3.4.1) 

支持的最低版本

 

aux_source_directory(. DIR_SRCS)  

查找当前目录所有源文件,并将源文件名称列表保持到 DIR_SRCS 变量

不能查找子目录

 

add_library

添加一个库

add_library(<name> [STATIC| SHARD | MODULE] [EXCLUDE_FORM_ALL] source1 source2 .. sourceN)

添加一个库文件,名为<name>

指定STATIC、 SHARD、 MIDULE 参数来指定库的类型 STATIC 静态库; SHARD 动态库;MODULE:在使用dyld的系统有效,若不支持dyld,等同于 SHARD

EXCLUDE_FORM_ALL:表示该库不会被默认构建

soruce1 source2.... sourceN:指定库的源文件

 

导入预编译库

add_library(<name> <SHARED | STATIC | MODULE | UNKNOWN> IMPORTED)

添加一个已存在的预编译库,名为<name>

一般配合 set_target_properties 使用

比如:

add_library(test SHARD IMPORTED)

set_target_properties(

    test #指定目标库名

    PROPERTIES IMPORTED_LOACATION #指明要设置的参数库路径

    /${ANDROID_ABI}/libtest.so #导入库的路径

)

 

set

设置变量

#设置可执行文件的输出路径 EXCUTABLE_OUTPUT_PATH是全局变量

set(EXCUTABLE_OUTPUT_PATH [output_path])

#设置库文件的输出路径 LIBARARY_OUTPUT_PATH 是全局变量

set(LIBARARY_OUTPUT_PATH  [output_path])

#设置C++ 编译参数

set(CMAKE_CXX_FLAGS "-Wall std=c++11")

#设置源文件集合

ser(SOURCE_FILES main.cpp test.cpp ...)

 

include_directories

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

# 可以使用相对路径或绝对路径,也可以使用自定义的变量值

include_dirctories(./inuclude ${MY_INCLUDE})

 

add_excutable

添加可执行文件

add_excutable(<name> ${SRC_LIST})

 

tartget_list_libraries

将若干库链接到目标库文件

链接的顺序应当符合gcc链接顺序规则,被链接的库放在依赖他的库的后面。

target_link_libarries(<name> lib1 lib2 lib3)

# 如果出现相互依赖的静态库, CMake会允许依赖库中包含循环依赖

add_library(A STATIC a.c)

add_libarry(B STATIC b.c)

target_link_libraries(A B)

target_link_libraries(B A)

add_executable(main main.c)

target_link_libraries(main A)

 

add_subdirctory

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

# sub_dir 指定包含CMakeLists.txt 和源码文件的子目录位置

# binary_dir 是输出路径,一般可以不指定

add_dubdirecroty(sub_dir [binary_dir])

 

file

文件操作命令

 

set_directory_porperties

设置某个路径的一种属性

set_direcory_properties(PROPERTIES prop1 vaules1 prop2 values)

prop1 prop2 代码属性,取值为:

INCLUDE_DIRECORIES

LINK_DIRECORIES

INCLUDE_REGULAR_EXPRESSION

ADDITIONAL_MAKE_CLEAN_FILES

 

set_property

在给定的作用域内设置一个命名的属性

set_property(

    <GLOBAL | DIRECORY [dir] | TARGET [target ...] | SOURCE [ src1 ...] | TEST [test1.. ]

    | CACHE [entry1...]>

    [APPEND]

    PROPETY <name> [value...]) 

)

  GLOBAL:全局作用域

    DIRECORY:默认当前路径,也可以用 [dir] 指定路径

    TARGET:目标作用域,可以是0 或者多个已有目标

SOURCE: 源文件作用域,可以是0个或多个源文件

TEST: 测试作用域,可以是0个或多个已有测试

CACHE:必须指定0个或多个cache中已有的条目

 

常见命令的使用

多个源文件处理

如果源文件很多,把所有文件一个一个加入很麻烦,

可以使 aux_source_directory命令或file命令,会查找指定目录下的所有源文件,然后将结果存进指定变量名

cmake_minimum_required(VERSINO 3.4.1)

# 查找当前目录所有源文件,并将名称保存到 DIR_SRSC 变量

# 不能查找子目录

aux_source_directory(. DIR_SRSC )

# 也可以使用file

file (GLOB DIR_SRC *.c *.cpp)

add_library(native-lib SHRAD &{DIR_SRCS})

 

多个目录多源文件处理

 

添加预编译库(Android6.0 版本以前)

 

android6.0 版本以后

 

添加头文件目录

 

Build.gradle配置

可以在gradle中使用arguments 设置一些配置

CmakeList 配置文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值