编译原理与语法(六)——CMakeLists.txt详解

2019-10-10  本文已影响0人  王志强_9380
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(VERSION 3.4.1)

指定cmake最低支持的版本,可以省略

aux_source_directory(. DIR_SRCS)

add_library

添加一个库
add_library(name
            STATIC|SHARED|MODULE
            EXCLUDE_FROM_ALL
            source1 source2 ... sourceN)

add_library( 
             native-lib
             SHARED
             native-lib.cpp )

导入预编译库
add_library(name
            STATIC|SHARED|MODULE|UNKNOWN
            IMPORTED
        )

add_library(test
            SHARED
            IMPORTED
        )
set_target_properties(
            test #指明目标库名
            PROPERTIES IMPRORTED_LOCATION #指明要设置的参数库路径/${ANDROID_ABI}/
            libtest.so #导入库的路径
)

set 设置变量

include_directories

include_directories(./include ${MY_INCLUDE})

add_executable

add_executable(name $(SRC_LIST))
添加可执行文件

target_link_libraries

target_link_libraries(name lib1 lib2 lib3)

add_library(A STATIC a.c)
add_library(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_definitions

add_definitions(-DF00 -DDEBUG ...)
为当前路径以及子目录的源文件加入由-D引入的define flag

add_subdirectory

add_subdirectory(sub_dir [binary_dir])

set_directory_properties

set_directory_properties(PROPERTIES prop1 value1 prop2 value2)

set_property

set_property(<GLOBAL |
        DIRECTORY [dir] |
        TARGET [target1 [target2 ...]] |
        SOURCE [src1 [src2 ...]] |
        TEST [test1 [test2 ...]] |
        CACHE [entry1 [entry2 ...]]>
        [APPEND][APPEND_STRING]
        PROPERTY <name>[value1 [value2 ...]])

find_library

find_library( 
        log-lib
        log)

查找系统库,这里查找的是系统日志库,并赋值给变量log-lib.
目录位置:ndk-bundle\platforms\android-21\arch-arm\usr\lib\liblog.so

多个源文件处理

aux_source_directory(. DIR_SRCS)
# file(GLOB DIR_SRCS *.c *.cpp)
add_library(
        native-lib
        SHARED
        ${DIR_SRCS})

使用aux_source_directory或者file命令查找指定目录下所有源文件,存进指定的变量DIR_SRCS

多目录多个源文件处理

aux_source_directory(. DIR_SRCS)
add_subdirectory(child)
add_library(
        native-lib
        SHARED
        ${DIR_SRCS})
target_link_libraries(native-lib child)

-------------------------------------------------------
#child目录与下的CMakeLists.txt
aux_source_directory(. DIR_LIB_SRCS)
add_library(
        child
        SHARED
        ${DIR_LIB_SRCS})

添加预编译库

add_library(
        imported-lib
        SHARED
        IMPORTED )
set_target_properties(
        imported-lib
        PROPERTIES
        IMPORTED_LOCATION 
        路径/libimported-lib.so)
aux_source_directory(. DIR_SRCS)
add_library(
        native-lib
        SHARED
        ${DIR_SRCS})
target_link_libraries(native-lib imported-lib)

Android6.0以上使用set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -L[SO所在目录]")

  • CMAKE_C_FLAGS :c的参数,会传递给编译器
  • 如果是c++文件,需要使用CMAKE_CXX_FLAGS
  • -L:库的查找路径

添加头文件目录

include_directories(文件目录)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" -L[SO所在目录])
aux_source_directory(. DIR_SRCS)
add_library(
        native-lib
        SHARED
        ${DIR_SRCS})
target_link_libraries(native-lib imported-lib)
上一篇下一篇

猜你喜欢

热点阅读