日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cmakelists语法_CMakeList语法知识

發布時間:2023/12/2 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmakelists语法_CMakeList语法知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在寫這篇文章之前開始是想一些shell腳本與Makefile的一些基礎語法知識。但是又覺得太過基礎。關于Liunx shell腳本可以看看教程http://c.biancheng.net/linux_tutorial/ CMake是一種跨平臺編譯工具,CMake主要是編寫CMakeLists.txt文件,然后通過cmake命令將CMakeLists.txt文件轉化為make所需要的Makefile文件,最后用make命令編譯源碼生成可執行程序或者庫文件。實際項目中的C/C++文件不計其數、文件放置的位置也不同,Makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作。實現自動化的編譯。

CMake方式編譯生成庫文件

以簡單的例子來來看看CMake的語法,創建一個 test項目,項目結構如下

├── test目錄

│ ├── CMakeLists.txt

│ ├── include目錄

│ │ ├── myprint.h

│ ├── src 目錄

│ │ ├── myprint.cpp

│ ├── lib目錄

│ ├── biuld目錄

示例項目目錄結構.png

include目錄放置頭文件,src目錄下放置的是.c/.cpp源文件,biuld目錄是用來構建的項目,lib目錄用來放置我們生成庫文件。

include目錄下的myprint.h頭文件

#include

#include

void myprint(char* str);

src目錄下myprint.cpp文件

#include "/usr/demo/test5/include/myprint.h"

void myprint(char* str) {

printf("%s",str);

}

怎樣利用CMake來將項目編譯成動態庫提供給其他項目使用。首先我們要創建CMakeLists.txt文件,簡單的來說CMake就是我們把編譯信息錄入,cmake命令根據CMakeLists.txt生成編譯需要的Makefile文件??纯碈MakeLists.txt具體的編寫

#指定CMake編譯最低要求版本

CMAKE_MINIMUM_REQUIRED(VERSION 3.14)

#給項目命名

PROJECT(MYPRINT)

#收集c/c++文件并賦值給變量SRC_LIST_CPP ${PROJECT_SOURCE_DIR}代表區當前項目錄

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)

#指定生成庫文件的目錄

SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#去變量SRC_LIST_CPP 與SRC_LIST_C 指定生成libmyprint 動態庫 默認生成靜態庫 SHARED指定生成庫類型為動態庫

ADD_LIBRARY(myprint SHARED ${SRC_LIST_CPP} ${SRC_LIST_C})

編寫好CMakeLists.txt文件 cd到項目biuld目錄執行cmake命令 將會在biuld目錄下生成Makefile文件,執行make命令項目就會開始編譯,在項目lib目錄下生成libmyprint.so文件,是不是非常簡單,相比編寫Makefile文件來說。生成的動態庫文件那么我們怎么去鏈接使用他呢?繼續往下看

CMake鏈接使用庫文件

這里就不新建項目啦,直接在src目錄下新建源文件建hello.cpp 來應用libmyprint.so庫。

#include

#include "/usr/demo/test5/include/myprint.h"

int main() {

myprint("hello World\n");

return 0;

}

那么我們就要重新寫個CMakeLists.txt文件,內容如下

CMAKE_MINIMUM_REQUIRED(VERSION 3.14)

#指定項目名稱

PROJECT(HELLO)

#將hello.cpp 賦值給SOURCE 變量

SET(SOURCE ${PROJECT_SOURCE_DIR}/src/hello.cpp)

#指定頭文件目錄

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

#指定鏈接庫文件目錄

LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)

#將hello.cpp生成可執行文件hello

ADD_EXECUTABLE(hello ${SOURCE})

#指定hello 鏈接庫myprint

TARGET_LINK_LIBRARIES(hello myprint)

cd到項目biuld目錄執行cmake命令 將會在biuld目錄下生成Makefile文件,執行make命令,編譯完后,將在biuld目錄下生成可執行文件hello。執行hello

helloworld.png

Android程序員學習CMake最終還是要為我們Android項目服務,Android studio 2.2 之后開始采用 CMake 的這種方式來構建NDK項目。包括一些優秀的開源庫也有采用CMake的方式來編譯。具體看看CMake在Android中的使用。

Android中的CMakeLists.txt

由于后面會寫一些關于NDK音視頻的知識,就以引入FFmpeg音視頻庫來看看Android 中CMakeLists.txt是怎么編寫的。

# For more information about using CMake with Android Studio, read the

# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# 需要引入我們頭文件,以這個配置的目錄為基準

include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/include)

#添加共享庫搜索路徑

link_directories(${CMAKE_SOURCE_DIR}/src/main/jniLibs/armeabi)

# 指定源文件目錄

AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/main/cpp SRC_LIST)

add_library(

# Sets the name of the library.

native-lib

# Sets the library as a shared library.

SHARED

# Provides a relative path to your source file(s).

# src/main/cpp/native-lib.cpp

${SRC_LIST}

)

find_library( # Sets the name of the path variable.

log-lib

# Specifies the name of the NDK library that

# you want CMake to locate.

log )

target_link_libraries( # Specifies the target library.

native-lib

avcodec-57

avdevice-57

avfilter-6

avformat-57

avutil-55

swresample-2

swscale-4

postproc-54

# Links the target library to the log library

# included in the NDK.

${log-lib} )

總結

了解了CMake語法,以及它正真的意義。以后遇上Android NDK項目便可以自己編寫CMakeLists.txt文件內容。要想更深的深入可以去學習一下CMake文檔。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的cmakelists语法_CMakeList语法知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。