CMake语法-详解CMakeLists.txt

Mac上CMake的安装

  • 推荐大家看这篇博客:https://blog.csdn.net/baimafujinji/article/details/78588488
  • cmake下载地址:https://cmake.org/download/

CMake初探HelloWorld

#给工程取一个名字
PROJECT (HELLO)
#打印
MESSAGE(STATUS "This is BINARY dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
MESSAGE(STATUS "This is PROJECT_SOURCE dir" ${PROJECT_SOURCE_DIR})
# 生成可执行的文件
ADD_EXECUTABLE(hello.out hello.cpp)

定义一个变量给hello.cpp

#给工程取一个名字
PROJECT (HELLO)
#定义一个变量
SET(SRC_LIST hello.cpp)
#打印
MESSAGE(STATUS "This is BINARY dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
MESSAGE(STATUS "This is PROJECT_SOURCE dir" ${PROJECT_SOURCE_DIR})
# 生成可执行的文件
ADD_EXECUTABLE(hello.out ${SRC_LIST})

构建生成.so库

新建三个目录


image.png

src目录存放cpp文件,include存放.h文件,lib用来生成so库,sub和add的源码

#include "add.h"
int add(int num1, int num2){
        return num1 + num2;
}

#include "sub.h"                         
int sub(int num1, int num2){         
        return num1 - num2;         
}

我们用上面准备好的 用CMake 来构建一个 libmath.so 动态库,新建CMakeLists.txt

#指定CMake的最低编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)

#指定一个名字
PROJECT (MATH)

#搜集src目录下所有的.cpp文件(源文件)
#SRC_LIST代表src目录下所有的源文件
#AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src,SRC_LIST)
FILE(GLOB SRC_LIST_CPP "${PROJECT_SOURCE_DIR}/src/*.cpp")
FILE(GLOB SRC_LIST_C "${PROJECT_SOURCE_DIR}/src/*.c")

#指定头文件
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

#打印
MESSAGE(STATUS "src_list:" ${SRC_LIST_CPP} ${SRC_LIST_C})

#指定 so的生成目录lib
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#指定生成静态库
#ADD_LIBRARY(math ${SRC_LIST_CPP}${SRC_LIST_C}

#指定生成动态库
ADD_LIBRARY(math SHARED ${SRC_LIST_CPP} ${SRC_LIST_C})

链接外部动态库与头文件

将 libs 目录和 include 目录 copy 到 hello.cpp 同级目录下,hello.cpp 源码如下:

#include 
#include "add.h"
#include "sub.h"

int main(int argc, char* argv[]){
        int a = 20;
        int b = 10;
        printf("%d+%d=%d\n",a,b,add(a,b));
        printf("%d-%d=%d\n",a,b,sub(a,b));
        return 0;
}

新建 CMakeLists.txt 来生成可执行文件 hello

# 指定cmake最低编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
# 指定工程的名称
PROJECT(HELLO)
#指定头文件目录位置
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
#添加共享库搜索路径
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
#生成可执行文件
ADD_EXECUTABLE(hello hello.cpp)
#为hello添加共享库链接
TARGET_LINK_LIBRARIES(hello math)

基于 FFmpeg 开发的 CMakeLists.txt

image.png

image.png

我们这时候会发现源文件中很多报错了,这是因为我们没有指定路径,和链接额外的 ffmpeg 的编译.so文件,修改CMakeList.txt文件

#最低版本名称
cmake_minimum_required(VERSION 3.4.1)

#引入头文件目录
include_directories(src/main/jniLibs/include)
include_directories(src/main/jniLibs/other)

#指定共享库的库目录
link_directories(src/main/jniLibs/armeabi)
#指定源文件的目录
aux_source_directory(src/main/cpp src_list)

#生成native-lib
add_library(
             native-lib
             SHARED
             ${src_list} )


find_library( log-lib
              log )

#为native-lib添加ffmpeg编译连接库

target_link_libraries(
                       native-lib
                       avcodec-56
                       avdevice-56
                       avfilter-5
                       avformat-56
                       avutil-54
                       postproc-53
                       swresample-l
                       swscale-3
                       #系统
                       -landroid
                       ${log-lib} )


你可能感兴趣的:(CMake语法-详解CMakeLists.txt)