[Cmake] CMakeList agregar biblioteca | agregar archivo de encabezado | agregar ruta

CMake: 1-CMakeLists genera y agrega bibliotecas dependientes

https://blog.csdn.net/qq_37761077/article/details/88750711

 

Adición de la biblioteca de dependencia de Opencv:

cmake_minimum_required( VERSION 2.8 )
project( imageBasics )
 
# 添加c++ 11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11" )
 
# 寻找OpenCV库
set(OpenCV_DIR /home/chaofan/opt/opencv-3.4.4/release)
find_package( OpenCV 3 REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )
 
add_executable( imageBasics imageBasics.cpp )
# 链接OpenCV库
target_link_libraries( imageBasics ${OpenCV_LIBS} )

Los pasos principales para agregar bibliotecas dependientes se explican anteriormente:

Primero: agregue archivos de encabezado

Segundo: encuentra el archivo fuente

Tercero: Vincular con el objetivo.

 

 

Si necesita especificar diferentes versiones de opencv en el proyecto, puede seguir los pasos a continuación:

1. Especifique la ruta de la biblioteca

file(GLOB_RECURSE Opencv3.0_LIB "/home/LiuMC/software/third_lib/opencv3.0-install/lib/*.so")

2. Especifique la ruta del archivo de encabezado

set(Opencv3_INLCUDE_DIRS "/home/LiuMC/software/third_lib/opencv3.0-install/include")

3. Agregue archivos de encabezado al proyecto

include_directories(include
    ${Opencv3_INLCUDE_DIRS}
  )

4. Agregue archivos de biblioteca al proyecto

target_link_libraries(rovioLib  ${Opencv3.0_LIB})


Nota: Para evitar problemas innecesarios, intente agregar archivos de encabezado y archivos de biblioteca al primer elemento, como por ejemplo:

target_link_libraries(rovioLib  
    ${Opencv3.0_LIB}
    ${Opencv3.0_HAL_LIB}
    ${catkin_LIBRARIES}
    )

Enlace original: https://blog.csdn.net/liumingchun13/article/details/77089577

 

 

¿Cuál es la diferencia entre link_libraries (dcn_v2_cuda_forward_v2) y target_link_libraies?

 

Ejemplo simple:

 

1. Generar archivos de biblioteca compartida .so. A
continuación, se muestran algunos de mis archivos:

1hello.cpp

// hola.cpp
 int Calculate_sum_Of_Two_Number (int x, int y)
{    int z = 0;    z = x + y;    retorno (z); } 2hello.hpp




// hola.hpp
#ifndef __HELLO_H
#define __HELLO_H
int Calculate_sum_Of_Two_Number (int x, int y);
#endif
3 main.cpp

//main.cpp
#include "hello.hpp"
#include <stdio.h>
int main (void)
{    int a = 0, b = 0, c = 0;    printf ("por favor ingrese dos parámetros:");    scanf ("% d", & a);    scanf ("% d", & b);    c = Calculate_sum_Of_Two_Number (a, b);    printf ("la suma es:% d", c);    return 0; } 4 CMakeLists.txt








#REQUIRED versión mínima de
Cmake CMAKE_MINIMUM_REQUIRED (versión 2.8) #Project
 
nombre
PROYECTO (principal) #Establecer
 
compilador de compilación modo:
conjunto (CMAKE_BUILD_TYPE "depuración") #Generate
 
compartida biblioteca #
obtener el paquete compartido
#here no necesita .hpp
add_library (calculate_shared COMPARTIDA hello.cpp) #Generar
 
archivos ejecutables
add_executable (main main.cpp) #Conecte la
 
biblioteca compartida
target_link_libraries (main calculate_shared) en
CmakeLists.txt arriba, el nombre de la biblioteca compartida es calculate_shared, que podemos cambiar por nosotros mismos. El archivo ejecutable generado es principal y el nombre también se puede cambiar.

Pero debe tenerse en cuenta que no es necesario incluir hello.hpp en hello.cpp. (Khan, debido a que esto provocó un error, el indicador decía que la función se definió repetidamente);

Compila y genera:

mkdir build
cd build
cmake ..
make
Podemos ver que la construcción generó los siguientes archivos:

CMakeCache.txt cmake_install.cmake principal
CMakeFiles libcalculate_shared.so Makefile

 libcalculate_shared.so es el archivo de biblioteca compartida generado.

Su camino es: / home / fan / dev / cmake / 4-exer /

Hay carpetas de compilación a continuación, así como main.cpp, hello.cpp, hello.hpp, 

Hay una biblioteca compartida libcalculate_shared.so.so en la carpeta de compilación

2. Llamar archivos de biblioteca compartida
Todas las bibliotecas dependientes externas son así, como opencv, openni, eigen, etc. El principio es el mismo, pero ya están instaladas en el sistema y se pueden buscar, y esto requiere nuestra propia Ir a configuración.

Es decir, el archivo de biblioteca compartida que generé anteriormente es esencialmente el mismo que el de la biblioteca opencv. Pero esta biblioteca compartida debe configurarse manualmente.

Por ejemplo, he creado un nuevo proyecto y necesito llamar a la biblioteca compartida anterior libcalculate_shared.so.

main.cpp es el siguiente:

//main.cpp
#include <stdio.h>
#include <iostream>
#include "hello.hpp"
usando el espacio de nombres std;
int main (void)
{    int x = 2, y = 3;    int z = 0;    z = Calculate_sum_Of_Two_Number (x, y);    cout << "el resultado es:" << z << endl;    return 0; } Luego, en CMakeLists.txt, necesito decirle a CMake dónde encontrar este archivo de encabezado. ¿Dónde puede la función definida ser encontrado.






La ruta de hello.hpp anterior es: /home/fan/dev/cmake/4-exer/hello.hpp

La ruta de libcalculate_shared.so es /home/fan/dev/cmake/4-exer/build/libcalculate_shared.so

Entonces CMakeLists.txt es el siguiente:

CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
 
PROJECT (principal) #Establecer el
modo de compilación
del compilador: SET (CMAKE_BUILD_TYPE "Debug")
 
SET (HELLO_INCLUE 
    / home / fan / dev / cmake / 4-exer /)
 
SET (HELLO_SRC 
    / home / fan / dev / cmake / 4-exer / build / libcalculate_shared.so)
 
INCLUDE_DIRECTORIES ($ {HELLO_INCLUE})
 
add_executable (main main.cpp)
 
target_link_libraries (main $ {HELLO_SRC})
Aquí hay algunos detalles (para mi escoria)

1. Esta forma de $ {} representa una variable, como la anterior, HELLO_INCLUE, que es una variable definida por mí.

2. El archivo de encabezado se incluye en la carpeta donde se encuentra el archivo de encabezado, a saber, / home / fan / dev / cmake / 4-exer /

3. La biblioteca compartida debe especificar la biblioteca compartida específica, con una precisión de .so

De hecho, lo principal es especificar el archivo de encabezado utilizado al llamar a esta biblioteca compartida y la ubicación de la biblioteca compartida en sí, y luego incluir el enlace.

Las bibliotecas compartidas instaladas (como opencv) no tienen por qué ser tan problemáticas, porque sus direcciones se colocan en variables.

Adición de dependencia de Opencv. Por
ejemplo, Opencv, sus archivos de encabezado y archivos .so ya están colocados en las variables del sistema, por lo que no es necesario que los defina usted mismo (las direcciones de los archivos de encabezado y los archivos de biblioteca compartida en el ejemplo anterior son todos establecido por mí mismo)

Su CMakeLists.txt es el siguiente:

find_package (OpenCV REQUERIDO)

include_directories ($ {OPENCV_INCLUDE_DIRS})

target_link_libraries (MAIN $ {OpenCV_LIBS})

Basta encontrarlo, OpenCV_LIBS y OPENCV_INCLUDE_DIRS ya están definidos para nosotros por el sistema, por lo que es más fácil

Blog de referencia:

1. Cómo escribir su propio CmakeLists.txt https://www.cnblogs.com/chaofn/p/10160555.html

2. [OpenCV] Utilice CMake para vincular la biblioteca OpenCV bajo su propia ruta https://blog.csdn.net/twt520ly/article/details/81981473

Enlace original: https://blog.csdn.net/qq_37761077/article/ detalles / 88750711

 

Supongo que te gusta

Origin blog.csdn.net/bandaoyu/article/details/115165199
Recomendado
Clasificación