我构建了一个依赖于OpenCV的C++库。但是,有时我不需要使用OpenCV,并且在没有OpenCV的情况下编译代码。
这个想法是,当 CMake 中的OpenCV_Found
变量为真时,将有一个类似于OpenCV_Found
变量的预处理器变量,但在C++代码中。换句话说,我想做这样的事情:
#ifdef OpenCV_Found
#include <opencv2/core/core.hpp>
#endif
我的问题是:
OpenCV是否提供了类似的变量?还是我必须手动定义它,并将其发送到目标编译标志?
可以使用CMake 将OpenCV_Found
CMake 定义转发到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(不区分大小写等于0
、FALSE
、OFF
、N
、NO
、IGNORE
或NOTFOUND
(时,将省略OpenCV_Found
预处理器定义。