how to use pkg-config in cmake?

I installed opencv by sudo apt-get install libopencv-dev. Then opencv.pc file and opencv libraries are installed on my computer. I want to use the opencv libraries in another project which was build by cmake. how can I find and link these opencv libraries to the cmake project?
these are my cmake codes:

cmake_minimum_required(VERSION 3.17)
project(C__test)

set(CMAKE_CXX_STANDARD 14)

set(ENV{PKG_CONFIG_PATH} /usr/lib/x86_x64-linux-gnu/pkgconfig)
find_package(PkgConfig REQUIRED)
pkg_check_modules(OPENCV REQUIRED IMPORTED_TARGET opencv)
#MESSAGE(STATUS ${OPENCV_LIBRARIES})
if(${OPENCV_FOUND})
    MESSAGE(${PKG_CONFIG_EXECUTABLE})
    MESSAGE(${OPENCV_LIBRARIES})
    MESSAGE(${OPENCV_LINK_LIBRARIES})
endif()
target_link_libraries(${PROJECT_NAME} -lopencv_core)

add_executable(C__test main.cpp)

but cmake incomplete and output:

/usr/bin/pkg-config
opencv_shapeopencv_stitchingopencv_superresopencv_videostabopencv_arucoopencv_bgsegmopencv_bioinspiredopencv_ccalibopencv_datasetsopencv_dpmopencv_faceopencv_freetypeopencv_fuzzyopencv_hdfopencv_line_descriptoropencv_optflowopencv_videoopencv_plotopencv_regopencv_saliencyopencv_stereoopencv_structured_lightopencv_phase_unwrappingopencv_rgbdopencv_vizopencv_surface_matchingopencv_textopencv_ximgprocopencv_calib3dopencv_features2dopencv_flannopencv_xobjdetectopencv_objdetectopencv_mlopencv_xphotoopencv_highguiopencv_videoioopencv_imgcodecsopencv_photoopencv_imgprocopencv_core
/usr/lib/x86_64-linux-gnu/libopencv_shape.so/usr/lib/x86_64-linux-gnu/libopencv_stitching.so/usr/lib/x86_64-linux-gnu/libopencv_superres.so/usr/lib/x86_64-linux-gnu/libopencv_videostab.so/usr/lib/x86_64-linux-gnu/libopencv_aruco.so/usr/lib/x86_64-linux-gnu/libopencv_bgsegm.so/usr/lib/x86_64-linux-gnu/libopencv_bioinspired.so/usr/lib/x86_64-linux-gnu/libopencv_ccalib.so/usr/lib/x86_64-linux-gnu/libopencv_datasets.so/usr/lib/x86_64-linux-gnu/libopencv_dpm.so/usr/lib/x86_64-linux-gnu/libopencv_face.so/usr/lib/x86_64-linux-gnu/libopencv_freetype.so/usr/lib/x86_64-linux-gnu/libopencv_fuzzy.so/usr/lib/x86_64-linux-gnu/libopencv_hdf.so/usr/lib/x86_64-linux-gnu/libopencv_line_descriptor.so/usr/lib/x86_64-linux-gnu/libopencv_optflow.so/usr/lib/x86_64-linux-gnu/libopencv_video.so/usr/lib/x86_64-linux-gnu/libopencv_plot.so/usr/lib/x86_64-linux-gnu/libopencv_reg.so/usr/lib/x86_64-linux-gnu/libopencv_saliency.so/usr/lib/x86_64-linux-gnu/libopencv_stereo.so/usr/lib/x86_64-linux-gnu/libopencv_structured_light.so/usr/lib/x86_64-linux-gnu/libopencv_phase_unwrapping.so/usr/lib/x86_64-linux-gnu/libopencv_rgbd.so/usr/lib/x86_64-linux-gnu/libopencv_viz.so/usr/lib/x86_64-linux-gnu/libopencv_surface_matching.so/usr/lib/x86_64-linux-gnu/libopencv_text.so/usr/lib/x86_64-linux-gnu/libopencv_ximgproc.so/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so/usr/lib/x86_64-linux-gnu/libopencv_features2d.so/usr/lib/x86_64-linux-gnu/libopencv_flann.so/usr/lib/x86_64-linux-gnu/libopencv_xobjdetect.so/usr/lib/x86_64-linux-gnu/libopencv_objdetect.so/usr/lib/x86_64-linux-gnu/libopencv_ml.so/usr/lib/x86_64-linux-gnu/libopencv_xphoto.so/usr/lib/x86_64-linux-gnu/libopencv_highgui.so/usr/lib/x86_64-linux-gnu/libopencv_videoio.so/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so/usr/lib/x86_64-linux-gnu/libopencv_photo.so/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so/usr/lib/x86_64-linux-gnu/libopencv_core.so
CMake Error at CMakeLists.txt:15 (target_link_libraries):
  Cannot specify link libraries for target "C__test" which is not built by
  this project.

how can I integrate opencv with only .pc file to cmake project?

Your target does not yet exist at the point where you call target_link_libraries.
You need to add_executable first and then link.

1 Like

thank you!