在linux系統中的操作?
一、初試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})
二、構建生成.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)
?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 ?默認生成的是靜態庫?
?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-lib
?ADD_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)