Проблема: у меня есть проект, который использует OpenCV. Я могу переключиться на последнюю версию, если это будет необходимо. Мой проект использует CMake. В настоящее время я интегрирую opencv так:
# OPENCV package
find_package(OpenCV)
add_library(opencv INTERFACE)
target_include_directories(opencv
INTERFACE
${OpenCV_INCLUDE_DIRS})
target_link_libraries(opencv
INTERFACE
${OpenCV_LIBS})
add_executable(opencv_example example.cpp)
target_link_libraries(opencv_example
PRIVATE
opencv
)
Я не могу найти примеры OpenCV, использующих явные цели зависимости модуля. Для того, чтобы не нарушать глобальность, включайте необязательно или оставляйте обнаженные переменные вокруг себя. Я создаю интерфейсную цель для OpenCV и использую эту интерфейсную цель вместо того, что OpenCV CMake рекомендует для :
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)
# Link your application with OpenCV libraries
target_link_libraries(opencv_example ${OpenCV_LIBS})
Мой вопрос: можно ли просто использовать цели модуля OpenCV вместо того, чтобы брать с собой всю кухонную раковину?
пример (см. Список модулей здесь ):
...
add_executable(opencv_example example.cpp)
target_link_libraries(opencv_example
PRIVATE
opencv::core
opencv::video
opencv::imgproc
)
таким образом, я получаю только зависимости, необходимые для модулей, которые я на самом деле использую. Я просмотрел репозиторий OpenCV, но он полон пользовательских макросов и функций cmake, и трудно увидеть, где объявлена цель, не говоря уже о том, можно ли получить к ней доступ из find_package
.