matplotplusplus
matplotplusplus copied to clipboard
CImg: cv.h not found
Bug category
- [x] bug - compilation error
- [ ] bug - compilation warning
- [ ] bug - runtime error
- [ ] bug - runtime warning
- [ ] bug - logic error
Matplot++ Version 1.2.0
Describe the bug
I've added Matplot++ via CPM on two Ubuntu machines. I have no issues on one of them. The other, however, can not compile due to cv.h not being found which is required by the 3rd party library CImg.
In CImg.h I've tried changing the included headers to opencv2/opencv.hpp and opencv2/highgui.hpp as OpenCV 4.8.1 is installed. This, understandably, led to a bunch of errors. And removing the CImg library seems not to be a solution either as Matplot++ obviously relies on it in several ways.
Steps to Reproduce
mkdir build
cd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -S<redacted_project_path> -B<redacted_project_path>/build -G "Unix Makefiles" -D ENABLE_MATPLOT=ON
make -j8
(ENABLE_MATPLOT is an option I set in my project's CMake configuration to enable/disable some components which rely on Matplot. I can build my project without Matplot++ features if I want to, so you don't need to worry about that option.)
Output
In file included from <redacted_project_path>/build/_deps/matplotplusplus-src/source/matplot/util/common.cpp:23:
<redacted_project_path>/_deps/matplotplusplus-src/source/3rd_party/cimg/CImg.h:419:10: fatal error: cv.h: No such file or directory
419 | #include "cv.h"
| ^~~~~~
Platform
- [x] cross-platform issue - linux
- [ ] cross-platform issue - windows
- [ ] cross-platform issue - macos
Environment Details:
- OS: Ubuntu
- OS Version: 20.04.6 LTS
- Compiler: GCC/G++
- Compiler version: 9.4.0
Additional context CPM command used to add Matplot++ and the corresponding section in the specific CMake file:
CPMAddPackage("gh:alandefreitas/[email protected]")
target_link_libraries(${TARGET_NAME} matplot)
After upgrading CMake from 3.16.3 to 3.30.02 I now encounter the same issue on both machines. Both have newer CMake versions now. Therefore I wonder whether this issue is related to that.
I'm having the same issue while trying to add Matplot++ using CMake's FetchContent
FetchContent_Declare(
matplotplusplus
GIT_REPOSITORY https://github.com/alandefreitas/matplotplusplus.git
GIT_TAG v1.2.0
)
FetchContent_MakeAvailable(matplotplusplus)
target_link_libraries(tests PRIVATE matplot)
I'm using CMake 3.30.3
I also have this issue on Ubuntu 22.
A colleague of mine has helped to find a workaround for this issue.
It helps to disable line 120 in source/3rd_party/CMakeLists.txt:
https://github.com/alandefreitas/matplotplusplus/blob/6f8c26beee9a121f92ca6c856acd4520c1efd0e5/source/3rd_party/CMakeLists.txt#L120C5-L120C63
I have added a CMake option MATPLOTPP_WITH_OPENCV which disables this automatically and created a pull request. PR 448
In a CMake project you can now just add another parameter to the cmake command. For example:
cmake -B build -DMATPLOTPP_WITH_OPENCV=OFF
If you would like to disable it programatically in a CMake script, e.g., if you've added it via CPM, you can set the option to OFF like this:
set(MATPLOTPP_WITH_OPENCV OFF CACHE BOOL "Disable use of OpenCV in CImg of Matplot++" FORCE)
In case you've added Matplot++ via CPM, make sure to set the option before calling CPM. Otherwise the option is not effective, as CPM already triggers a configuration of the package.
Example:
# Set Matplot++ compile options.
set(MATPLOTPP_WITH_OPENCV OFF CACHE BOOL "Disable use of OpenCV in CImg of Matplot++" FORCE)
CPMAddPackage(
NAME matplotplusplus
GITHUB_REPOSITORY Zacrain/matplotplusplus
GIT_TAG cimg-optional-compilation
)
Note, that this is not a fix, just a workaround. Until the PR is merged or the issue resolved otherwise, this might help in your cases as well.