如何处理在源代码中找不到OpenCV

How to handle not finding OpenCV in source code

本文关键字:源代码 找不到 OpenCV 何处理 处理      更新时间:2023-10-16

我构建了一个依赖于OpenCV的C++库。但是,有时我不需要使用OpenCV,并且在没有OpenCV的情况下编译代码。

这个想法是,当 CMake 中的OpenCV_Found变量为真时,将有一个类似于OpenCV_Found变量的预处理器变量,但在C++代码中。换句话说,我想做这样的事情:

#ifdef OpenCV_Found
#include <opencv2/core/core.hpp>
#endif

我的问题是:

OpenCV是否提供了类似的变量?还是我必须手动定义它,并将其发送到目标编译标志?

可以使用CMake 将OpenCV_FoundCMake 定义转发到C++源代码。您可以在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(不区分大小写等于0FALSEOFFNNOIGNORENOTFOUND(时,将省略OpenCV_Found预处理器定义。