《OpenCV 4计算机视觉项目实战 》 —2.5 让脚本更复杂
2.5 让脚本更复杂
在本节中,我们将要展示一个更复杂的脚本,它包括子文件夹、库和可执行文件。但实际上,该脚本只有两个文件和几行代码,如下例所示。没有必要创建多个CMakeLists.txt文件,因为我们可以在主CMakeLists.txt文件中指定所有内容。但是,为每个项目子文件夹使用不同的CMakeLists.txt文件更为常见,可以使其更加灵活和便携。
这个例子有一个代码结构文件夹,其中包含一个utils库文件夹和一个根文件夹,后者包含主可执行文件:
然后,我们必须定义两个CMakeLists.txt文件,一个在根文件夹中,另一个在utils文件夹中。CMakeLists.txt根文件夹文件具有以下内容:
除了我们将要解释的一些函数之外,几乎所有的代码行都在前面中有过描述。add_subdirectory()告诉CMake分析所需子文件夹的CMakeLists.txt。在继续说明主CMakeLists.txt文件之前,我们先解释utils中的CMakeLists.txt文件。
在utils文件夹的CMakeLists.txt文件中,我们将编写一个将包含在主项目文件夹中的新库:
此CMake脚本文件定义一个变量UTILS_LIB_SRC,我们在其中添加库中包含的所有源文件,并使用add_library函数生成库,并且使用target_include_directories函数以便允许主项目检测所有头文件。离开utils子文件夹,继续准备根CMake脚本,其中,Option函数创建一个新的变量,在这个例子中为WITH_LOG,并附带一小段描述。可以通过ccmake命令行或显示描述内容的CMake GUI界面更改这个变量,用户还可以通过一个复选框启用或禁用此选项。这个函数非常有用,它使用户能够决定编译时功能,例如,我们是否要启用或禁用日志,是否像OpenCV一样使用Java或Python进行编译,等等。
在这个例子中,我们使用此选项在应用程序中启用记录器。为启用记录器,我们在代码中使用了一个预编译器定义,如下所示:
可以通过调用add_definitions函数(-DLOG)在CMakeLists.txt中定义这个LOG宏,该函数本身可以使用简单条件根据CMake变量WITH_LOG运行或隐藏:
至此,我们就完成了创建CMake脚本文件的准备工作,可以在任何操作系统中编译我们的计算机视觉项目。然后,在开始示例工程之前,我们会继续介绍OpenCV的基础知识。
- 点赞
- 收藏
- 关注作者
评论(0)