如何处理在源代码中找不到 OpenCV
How to handle not finding OpenCV in source code
我构建了一个依赖于 OpenCV 的 C++ 库。但是,有时我不需要使用OpenCV,我编译代码时不用它。
想法是,当CMake中的OpenCV_Found
变量为真时,会有一个类似于OpenCV_Found
变量的预处理器变量,但在C++代码中。换句话说,我想做这样的事情:
#ifdef OpenCV_Found
#include <opencv2/core/core.hpp>
#endif
我的问题是:
OpenCV 是否提供类似的变量?或者我是否必须手动定义它,并将其发送到目标编译标志?
您可以使用 CMake 将 转发 OpenCV_Found
CMake 定义到您的 C++ 源代码。您可以像这样使用 generator expression in target_compile_definitions()
:
add_executable(MyExe ${MY_SOURCES})
target_compile_definitions(MyExe PUBLIC $<$<BOOL:${OpenCV_Found}>:OpenCV_Found>)
当 ${OpenCV_Found}
CMake 变量的计算结果为 True 时,这会将 OpenCV_Found
作为预处理器定义添加到 MyExe
目标。当 CMake 变量 ${OpenCV_Found}
的计算结果为 False(不区分大小写等于 0
、FALSE
、OFF
、N
、NO
、IGNORE
, 或 NOTFOUND
), OpenCV_Found
预处理器定义被省略。
我构建了一个依赖于 OpenCV 的 C++ 库。但是,有时我不需要使用OpenCV,我编译代码时不用它。
想法是,当CMake中的OpenCV_Found
变量为真时,会有一个类似于OpenCV_Found
变量的预处理器变量,但在C++代码中。换句话说,我想做这样的事情:
#ifdef OpenCV_Found
#include <opencv2/core/core.hpp>
#endif
我的问题是:
OpenCV 是否提供类似的变量?或者我是否必须手动定义它,并将其发送到目标编译标志?
您可以使用 CMake 将 转发 OpenCV_Found
CMake 定义到您的 C++ 源代码。您可以像这样使用 generator expression in target_compile_definitions()
:
add_executable(MyExe ${MY_SOURCES})
target_compile_definitions(MyExe PUBLIC $<$<BOOL:${OpenCV_Found}>:OpenCV_Found>)
当 ${OpenCV_Found}
CMake 变量的计算结果为 True 时,这会将 OpenCV_Found
作为预处理器定义添加到 MyExe
目标。当 CMake 变量 ${OpenCV_Found}
的计算结果为 False(不区分大小写等于 0
、FALSE
、OFF
、N
、NO
、IGNORE
, 或 NOTFOUND
), OpenCV_Found
预处理器定义被省略。