How to link with OpenCV as cmake subdirectory
I have a project in which I manage most dependencies by tracking them with git submodules and then, where possible, adding them to a CMake build with add_subdirectory
. I am having trouble getting this to work with opencv because the include headers seem to be in the wrong spot until OpenCV is actually installed. The targets (e.g. opencv_core
, opencv_imgproc
) are available to link, but these targets seem not to export the expected build-time include directories.
I get the sense that my approach with git submodules and cmake subdirectories is not the way OpenCV expects this to go. Is there a best practice for linking/installing a custom OpenCV build in the context of a larger project via CMake?
Hmm, if you build OpenCV without doing a
make install
the build directory contains all the data you need. You use a submodule to clone the code, ignore the build directory (to avoid git issues) and make sure you link those lib and bin folders correctly. That should do the trick right?I think I have just got it working using a similar scheme, thanks. But it still requires building OpenCV first, which I was initially trying to avoid. Following the newer target-based style in cmake builds, it looks like the opencv targets do pull in their own dependencies, but only after its been built (not at config time). It seems that the includes get collected only at build-time for OpenCV, so the include search path isn't right until the library is fully built. Is that correct?
yep that seems correct, and indeed I guess you will need to build OpenCV first before your top project and not during the build. Like in a pre-config phase.