《OpenCV 4计算机视觉项目实战 》 —2.5 让脚本更复杂

举报
华章计算机 发表于 2019/11/10 09:52:36 2019/11/10
【摘要】 本节书摘来自华章计算机《OpenCV 4计算机视觉项目实战》 一书中第二章,第2.5节,作者[西班牙]大卫·米兰·埃斯克里瓦(David Millán Escrivá)[西班牙]维尼休斯·G.门东萨(Vinícius G. Mendon。

2.5 让脚本更复杂

在本节中,我们将要展示一个更复杂的脚本,它包括子文件夹、库和可执行文件。但实际上,该脚本只有两个文件和几行代码,如下例所示。没有必要创建多个CMakeLists.txt文件,因为我们可以在主CMakeLists.txt文件中指定所有内容。但是,为每个项目子文件夹使用不同的CMakeLists.txt文件更为常见,可以使其更加灵活和便携。

这个例子有一个代码结构文件夹,其中包含一个utils库文件夹和一个根文件夹,后者包含主可执行文件:

 image.png

然后,我们必须定义两个CMakeLists.txt文件,一个在根文件夹中,另一个在utils文件夹中。CMakeLists.txt根文件夹文件具有以下内容:

 image.png

除了我们将要解释的一些函数之外,几乎所有的代码行都在前面中有过描述。add_subdirectory()告诉CMake分析所需子文件夹的CMakeLists.txt。在继续说明主CMakeLists.txt文件之前,我们先解释utils中的CMakeLists.txt文件。

在utils文件夹的CMakeLists.txt文件中,我们将编写一个将包含在主项目文件夹中的新库:

 image.png

此CMake脚本文件定义一个变量UTILS_LIB_SRC,我们在其中添加库中包含的所有源文件,并使用add_library函数生成库,并且使用target_include_directories函数以便允许主项目检测所有头文件。离开utils子文件夹,继续准备根CMake脚本,其中,Option函数创建一个新的变量,在这个例子中为WITH_LOG,并附带一小段描述。可以通过ccmake命令行或显示描述内容的CMake GUI界面更改这个变量,用户还可以通过一个复选框启用或禁用此选项。这个函数非常有用,它使用户能够决定编译时功能,例如,我们是否要启用或禁用日志,是否像OpenCV一样使用Java或Python进行编译,等等。

在这个例子中,我们使用此选项在应用程序中启用记录器。为启用记录器,我们在代码中使用了一个预编译器定义,如下所示:

 image.png

可以通过调用add_definitions函数(-DLOG)在CMakeLists.txt中定义这个LOG宏,该函数本身可以使用简单条件根据CMake变量WITH_LOG运行或隐藏:

 image.png

至此,我们就完成了创建CMake脚本文件的准备工作,可以在任何操作系统中编译我们的计算机视觉项目。然后,在开始示例工程之前,我们会继续介绍OpenCV的基础知识。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。