CMake presenta bibliotecas de tres partes

El desarrollo de NDK en el lado móvil a menudo requiere la introducción de una biblioteca de terceros. Este artículo utiliza una biblioteca JSON común como ejemplo para ilustrar

dirección de descarga del código fuente jsoncpp https://github.com/open-source-parsers/jsoncpp

Descarga la etiqueta 1.9.5

1. Dependencia pura del código fuente

pruebajson1.zip

El directorio del proyecto es el siguiente:

El directorio jsoncpp es el código fuente de json

main.cpp es el código de prueba, de la siguiente manera

#include <iostream>

#include "json/json.h"

int main() {

Json::Value json;

json["name"] = "Wiki";

json["age"] = 18;

std::cout << json.toStyledString() << std::endl;

return 0;

}

CMakeLists.txt

cmake_minimum_required(VERSION 3.17)

project(testjson)

set(CMAKE_CXX_STANDARD 14)

# 头文件引入

include_directories(./jsoncpp/include)

#查找当前目录下、及protocol目录下所有cpp文件,保存在变量SEC_LIST中

file(GLOB SRC_LIST "*.cpp" "jsoncpp/*.cpp")

add_executable(testjson ${SRC_LIST})

# add_library(testjson SHARED ${SRC_LIST})

Resultados de la

2. Dependencias de ingeniería interna

testjson2.zip

A veces, la biblioteca tripartita la proporcionan otros equipos dentro de la empresa. Además de proporcionar el código fuente, también viene con CMakeLists.txt.

Tomando jsoncpp como ejemplo, la estructura del directorio es la siguiente:

El CMakeLists.txt en el directorio jsoncpp es el siguiente:

cmake_minimum_required(VERSION 3.17)

# 指定C++版本 1.9.5版本的jsoncpp需要用C++11版本的

set(CMAKE_CXX_STANDARD 11)

project(jsoncpp)

add_library(${PROJECT_NAME} json_tool.h json_valueiterator.inl json_reader.cpp json_value.cpp json_writer.cpp)

target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/include)

El CMakeLists.txt en el directorio principal del proyecto es el siguiente:

cmake_minimum_required(VERSION 3.17)

# 指定C++版本 1.9.5版本的jsoncpp需要用C++11版本的

set(CMAKE_CXX_STANDARD 11)

project(testjson)

# 添加子工程

add_subdirectory(jsoncpp)

add_executable(${PROJECT_NAME} main.cpp)

# 链接子工程,子工程addlibrary时生成的名字

target_link_libraries(${PROJECT_NAME} jsoncpp)

Resultados de la

3. Dependencia del modo biblioteca estática/biblioteca dinámica

testjson3.zip

A veces, el tercero no proporciona el código fuente, sino solo archivos de encabezado y archivos de biblioteca estática.

También tome jsoncpp como ejemplo, use el archivo estático jsoncpp compilado en 2

El directorio del proyecto es el siguiente:

El CMakeLists.txt en el directorio principal del proyecto es el siguiente:

cmake_minimum_required(VERSION 3.17)

# 指定C++版本

set(CMAKE_CXX_STANDARD 11)

project(testjson)

# 包含头文件

include_directories(jsoncpp/include)

add_executable(${PROJECT_NAME} main.cpp)

# 找到三方静态库

find_library(jsoncpp_lib NAMES jsoncpp PATHS ./jsoncpp)

target_link_libraries(${PROJECT_NAME} ${jsoncpp_lib})

Resultados de la

artículo de referencia

1. Proyecto C++: resumen de CMake agregando métodos de dependencia de bibliotecas de terceros submódulo git, find_library, FetchContent, CPM, etc. https://www.jianshu.com/p/f181b5bd0a63

2. La diferencia entre target_include_directories e include_directories cmake: PÚBLICO, PRIVADO, INTERFAZ en target_** bzdww

3. La diferencia entre enlace dinámico y enlace estático https://www.jianshu.com/p/c3ff6310f1f4

Supongo que te gusta

Origin blog.csdn.net/guo_zhen_qian/article/details/126379136
Recomendado
Clasificación