0
点赞
收藏
分享

微信扫一扫

Android中CMake语法介绍和简单使用

IT影子 2022-02-11 阅读 54
androidcmake

CMake是一个跨平台开源的构建系统。它是一个集软件构建、测试、打包于一身的软件,可以用简单的语句来描述所有平台的安装编译过程。

CMake的所有的语句都写在一个叫CMakeLists.txt的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关的变量值进行配置。

#工程路径 #nativelib和app为module名

set(pathToProject ${PROJECT_SOURCE_DIR}/nativelib)

set(pathToProject E:/Android/Code/MyProject/app)

#指定 cmake 的最小版本

cmake_minimum_required(VERSION 3.4.1)

#支持-std=gnu++11

set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

#加载native头文件依赖

include_directories( ${pathToProject}/src/main/cpp/include )

#动态加载库(以librf001.so为例)

add_library( rf001
        SHARED
        IMPORTED
        )

#引入库文件(以librf001.so为例)

set_target_properties(
        rf001
        PROPERTIES IMPORTED_LOCATION
        ${pathToProject}/src/main/jniLibs/${ANDROID_ABI}/librf001.so
)

#明确指定包含哪些源文件

add_library( # Sets the name of the library.
        demo
        # Sets the library as a shared library.
        SHARED
        # Provides a relative path to your source file(s).
        src/main/cpp/libMifare.cpp
        src/main/cpp/util/Exception.cpp
        )
add_library( # Sets the name of the library.
             LibUart

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
              src/main/cpp/LibUart.cpp
              src/main/cpp/util/Exception.cpp
             src/main/cpp/uart/Uart.cpp
             )

#查找指定的库文件

find_library( # Sets the name of the path variable.
              log-lib
 
              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

#指定链接动态库或静态库

target_link_libraries( # 目标库
                       demo
                       # 目标库需要链接的库
                       # log-lib 是上面 find_library 指定的变量名
                       ${log-lib} )
target_link_libraries( # Specifies the target library.
                       LibUart
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

#指定链接多个库

target_link_libraries(demo
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.a
    boost_system.a
    boost_thread
    pthread)

常用变量

1. 预定义变量

PROJECT_SOURCE_DIR:工程的根目录

PROJECT_BINARY_DIR:运行 cmake 命令的目录,通常是 ${PROJECT_SOURCE_DIR}/build

PROJECT_NAME:返回通过 project 命令定义的项目名称

CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径

CMAKE_CURRENT_BINARY_DIR:target 编译目录

CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径

CMAKE_CURRENT_LIST_LINE:当前所在的行

CMAKE_MODULE_PATH:定义自己的 cmake 模块所在的路径,SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块

EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置

LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置

2. 系统信息

­CMAKE_MAJOR_VERSION:cmake 主版本号,比如 3.4.1 中的 3

­CMAKE_MINOR_VERSION:cmake 次版本号,比如 3.4.1 中的 4

­CMAKE_PATCH_VERSION:cmake 补丁等级,比如 3.4.1 中的 1

­CMAKE_SYSTEM:系统名称,比如 Linux-­2.6.22

­CMAKE_SYSTEM_NAME:不包含版本的系统名,比如 Linux

­CMAKE_SYSTEM_VERSION:系统版本,比如 2.6.22

­CMAKE_SYSTEM_PROCESSOR:处理器名称

­UNIX:在所有的类 UNIX 平台下该值为 TRUE,包括 OS X 和 cygwin

­WIN32:在所有的 win32 平台下该值为 TRUE,包括 cygwin

举报

相关推荐

0 条评论