美文网首页
CMakeList.txt语法

CMakeList.txt语法

作者: 有心人2021 | 来源:发表于2021-03-16 14:27 被阅读0次

一. 初试 CMake 的 HelloWorld

# 给工程取一个名字
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})

hello.cpp 和该CmakeList.txt同一个目录

mkdir build
cd build 
#在当前文件下,依据上一级目录下的CmakeList.txt配置项,编译生成Makefile
cmake ../
make
#得到了编译的hello.out

二. 构建生成 .so 动态库
把 src 里的源文件,生成 .so 动态库,libmath.so 最终生成在 lib 目录下

# 指定 CMake 的最低编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
# ...
PROJECT (MATH)
# 搜集 src 目录下的所有 .cpp 文件(源文件)
# SRC_LIST 代表 src 目录下的所有源文件 
# AUX_SOURCE_DIRECTORY (${PROJECT_SOURCE_DIR}/src SRC_LIST)
#glob含义 https://www.cnblogs.com/coderfenghc/archive/2012/07/08/2581734.html
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)
# 指定 so 的生成目录 lib
SET (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# MESSAGE (STATUS "src_list : "${SRC_LIST})
# 指定生成动态库 .so  math -> libmath.so  默认生成的是静态库.a
ADD_LIBRARY (math SHARED ${SRC_LIST_CPP} ${SRC_LIST_C})

三. 链接外部动态库与头文件

# 指定 CMake 的最低编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)# ...
PROJECT (HELLO)
# 指定头文件在哪个目录
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/include)
# 编译是需要链接 lib 目录下的 libmath.so
# 指定 so 在哪个目录下
LINK_DIRECTORIES (${PROJECT_SOURCE_DIR}/lib)
# 生成可执行文件ADD_EXECUTABLE (hello hello.cpp)
# 为 hello 添加编译链接库
TARGET_LINK_LIBRARIES (hello math)

四. 编写基于 FFmpeg 开发的 CmakeLists.txt

# 指定最低版本名称
CMAKE_MINIMUM_REQUIRED(VERSION 3.4.1)
# 指定引入头文件目录 
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/main/jniLibs/include)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/main/jniLibs/other)
# 指定共享库的库目录
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi)
# 指定源文件的目录
AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/main/cpp SRC_LIST)
# 生成 native-libADD_
LIBRARY(native-lib SHARED ${SRC_LIST})
# 为 native-lib 添加 ffmpeg 编译链接库
TARGET_LINK_LIBRARIES(native-lib  avcodec-56
avdevice-56 
avfilter-5 
avformat-56 
avutil-54 
postproc-53 
swresample-1 
swscale-3 
-landroid 
-llog)
#1. TARGET_LINK_LIBRARIES注意里面空格
#2. -landroid和android一样,引用android包包,https://blog.csdn.net/u012483097/article/details/109066405

相关文章

网友评论

      本文标题:CMakeList.txt语法

      本文链接:https://www.haomeiwen.com/subject/uhxdcltx.html