【发布时间】:2020-02-28 14:16:05
【问题描述】:
我有一个将 OpenCV 添加到项目中的 CMake。
我使用以下代码将 openCV 添加到项目中:
if (MSVC)
file(TO_CMAKE_PATH $ENV{OPENCV_ROOT} OpenCV_DIR)
IF(NOT OpenCV_DIR)
MESSAGE( FATAL_ERROR "Please point the environment variable OpenCV_ROOT to the root directory of OpenCV installation. required openCv V 4.2.x as minimum")
ENDIF()
set(BUILD_SHARED_LIBS OFF)
find_package(OpenCV 4.2.0 REQUIRED)
else (MSVC)
set(BUILD_SHARED_LIBS ON)
find_package(OpenCV COMPONENTS core highgui imgproc imgcodecs videoio photo stitching flann ml features2d calib3d objdetect REQUIRED)
endif(MSVC)
如果我没有定义 OpenCV_root 环境变量,CMake 将找不到 OpenCV,如果我定义它,我会收到以下警告:
CMake Warning (dev) at CMakeLists.txt:36 (find_package):
Policy CMP0074 is not set: find_package uses <PackageName>_ROOT variables.
Run "cmake --help-policy CMP0074" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
Environment variable OpenCV_ROOT is set to:
D:\local\opencv
For compatibility, CMake is ignoring the variable.
This warning is for project developers. Use -Wno-dev to suppress it.
如果我没有定义 openCV_root 环境变量,那么 CMake 应该如何找到 OpenCV?
同样的问题也适用于其他包(例如 boost,我得到了同样的警告),我们是否应该定义一个 env 变量?
如果我不定义环境变量,OpenCV 将如何找到包?
【问题讨论】:
-
您是否阅读了
find_package()的文档? -
@squareskittles:文档指出,
find_package使用<PackageName>_ROOT变量来发现包。提问者正是为此目的设置了这个变量……并得到了CMP0074 警告,即使对我来说,这看起来也很令人困惑。所以帖子里提出的问题很有道理。 -
@Tsyvarev 你是对的。那么问题是否变成了“为什么没有设置 CMP0074?”。 CMake 应该默认使用
NEW行为,对吗?