Saya tidak dapat menautkan perpustakaan eksternal dengan perpustakaan yang saya tulis menggunakan CMake. Saya ingin tahu apakah ada sesuatu yang perlu ditambahkan ke CMakeLists.txt saya? Atau jika saya perlu menambahkan CMakeLists.txt lain di tingkat yang lebih rendah (di dalam src) dan apa yang perlu dikandungnya?

Saya memiliki struktur proyek berikut:

ProjectFolder
│   ├── CMakeLists.txt
│   ├── build
│   │   └── 
│   ├── include
│   │   └── helper.h
│   └── src
│       ├── helper.cpp
        └── main.cpp

CMakeList.txt saya adalah:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

project(object_detection)

find_package(PCL 1.5 REQUIRED)
find_package(OpenCV REQUIRED)


file(GLOB SOURCES src/*.cpp)
file(GLOB INCLUDE include/*.h)

include_directories(${PCL_INCLUDE_DIRS} ${INCLUDE})
link_directories(${PROJECT_NAME} ${PCL_LIBRARY_DIRS} ${SOURCES} )
add_definitions(${PCL_DEFINITIONS})


add_executable (${PROJECT_NAME} src/main.cpp)
target_link_libraries (${PROJECT_NAME}  ${OpenCV_LIBS} ${PCL_LIBRARIES} ${SOURCES})

Dalam file saya helper.cpp saya memiliki:

#include <pcl/io/pcd_io.h>

Yang memberikan kesalahan:

fatal error: 'pcl/io/pcd_io.h' file not found
#include <pcl/io/pcd_io.h>
         ^~~~~~~~~~~~~~~~~

Namun saya memiliki penyertaan yang sama di main.cpp tanpa kesalahan.

Saya akan sangat berterima kasih atas bantuan apa pun, beri tahu saya jika saya perlu mengklarifikasi pertanyaan atau kesalahan saya. Terima kasih.

0
Arjun Datta 23 Mei 2021, 01:52

1 menjawab

Jawaban Terbaik

Ada beberapa kesalahan dalam CMakeLists.txt dengan perubahan berikut, proyek memuat pustaka yang sesuai dan membangun dengan benar. Catatan lain adalah bahwa sebelumnya, untuk memasukkan helper.h saya perlu menulis: #include "../include/helper.h".
Sekarang berfungsi seperti yang diharapkan dengan #include "helper.h". Berikut adalah CMakeLists.txt yang dimodifikasi:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

project(object_detection)

find_package(PCL 1.5 REQUIRED)
find_package(OpenCV REQUIRED)


file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp)


include_directories(${PCL_INCLUDE_DIRS} include)
link_directories(${PROJECT_NAME} ${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})


#add_executable (${PROJECT_NAME} src/helper.cpp src/main.cpp )
add_executable (${PROJECT_NAME} ${SRC_FILES} )

target_link_libraries (object_detection ${PCL_LIBRARIES} ${OpenCV_LIBS})
0
Arjun Datta 23 Mei 2021, 22:22