CMake语法-详解CMakeLists.txt

Mac上CMake的安装

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 <stdio.h>
#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} )


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容