外观
【01】CMake 扩展
819字约3分钟
写在前面
RMVL 将一部分常用的宏与函数添加到了 Visual Studio Code 的扩展中,以便在使用过 find_package(RMVL)
的项目中使用。
项目配置相关功能
提示
在 cmake/RMVLModule.cmake
中定义了 RMVL 的一些常用函数,这些函数可以帮助用户更方便地配置 RMVL 项目。
rmvl_compile_definitions
将预处理定义添加至指定目标
用法
rmvl_compile_definitions(<target>
<INTERFACE | PUBLIC | PRIVATE> [items1...]
[<INTERFACE | PUBLIC | PRIVATE> [items2...] ...])
示例
rmvl_compile_definitions(
aaa
INTERFACE HAVE_AAA
)
rmvl_install_directories
将指定路径下的所有文件安装至特定目标
用法
rmvl_install_directories(<directory> [DESTINATION])
示例
rmvl_install_directories(include/rmvl)
rmvl_update_build
更新 RMVL 目标构建的标志位,用于控制是否构建指定模块,不影响用户的选择
- 主要更新
BUILD_rmvl_xxx_INIT
变量 - 在满足条件时,设置
BUILD_rmvl_xxx_INIT
为ON
,否则为OFF
用法
rmvl_update_build(<name> [CONDITION])
示例
rmvl_update_build(
hik_camera
HikSDK_FOUND
)
rmvl_add_module
在当前目录中添加新的 RMVL 模块,并会依次添加至
- 局部变量
modules_build
- 缓存变量
RMVL_MODULES_BUILD
中
用法
rmvl_add_module(<name> [INTERFACE] [EXTRA_HEADER <list of other include directories>]
[EXTRA_SOURCE <list of other source directories>] [DEPENDS <list of rmvl dependencies>]
[EXTERNAL <list of 3rd party dependencies>])
示例
rmvl_add_module(
my_module # 需要生成的模块 (文件夹名)
EXTRA_HEADER xxx_h # 参与构建的除 include 文件夹以外的其余头文件目录
EXTRA_SOURCE xxx_src # 参与构建的除 src 文件夹以外的其余源文件目录
DEPENDS core # 依赖的 RMVL 模块 (文件夹名)
EXTERNAL ${OpenCV_LIBS} # 依赖的第三方目标库
)
rmvl_compile_options
将编译选项添加至指定目标
用法
rmvl_compile_options(<target> [BEFORE]
<INTERFACE | PUBLIC | PRIVATE> [items1...]
[<INTERFACE | PUBLIC | PRIVATE> [items2...] ...])
示例
rmvl_compile_options(
xxxx
PRIVATE -w
)
rmvl_add_test
此命令用于为指定模块添加新的 RMVL 测试
用法
rmvl_add_test(<name> <Unit|Performance> <DEPENDS> [rmvl_target...]
<EXTERNAL> [test_target...])
示例
rmvl_add_test(
detector Unit # 测试名
DEPENDS armor_detector # 需要依赖的 RMVL 目标库
EXTERNAL GTest::gtest_main # 需要依赖的第三方目标库,一般是测试工具库
)
rmvl_add_exe
此命令用于为指定模块添加新的 RMVL 可执行文件
用法
rmvl_add_exe(<name> SOURCES <file_name>
[DEPENDS <list of rmvl dependencies>]
[EXTERNAL <list of 3rd party dependencies>])
示例
rmvl_add_exe(
sample_armor_collection
SOURCES armor-collection.cpp
DEPENDS mv_camera armor_detector
)
rmvl_set_properties
设置如何构建指定 Target
的属性
用法
rmvl_set_properties(target1 target2 ...
PROPERTIES prop1 value1
prop2 value2 ...)
示例
rmvl_set_properties(
detector # 目标名
PROPERTIES CXX_STANDARD 17 # 属性
)
rmvl_link_directories
将指定目录添加至运行时动态库链接的搜索路径
用法
rmvl_link_directories(<target> [BEFORE]
<INTERFACE | PUBLIC | PRIVATE> [items1...]
[<INTERFACE | PUBLIC | PRIVATE> [items2...] ...])
示例
rmvl_link_directories(
xxxx
PRIVATE /home/xxx/mylib/lib
)
rmvl_link_libraries
将指定目标链接至指定的库
用法
rmvl_link_libraries(<target> [BEFORE]
<INTERFACE | PUBLIC | PRIVATE> [items1...]
[<INTERFACE | PUBLIC | PRIVATE> [items2...] ...])
示例
rmvl_link_libraries(
my_module
PRIVATE mylib
)
IDL 生成相关功能
提示
在 cmake/RMVLGenPara.cmake
中定义了 RMVL Parameters IDL 的一些常用函数,主要用于根据指定的 *.para
文件生成对应的 C++ 代码。
system_date
获取系统日期
用法
system_date(
<output year> <output month> <output day>
)
示例
system_date(
year # 年份,格式为 yyyy
month # 月份,格式为 mm
day # 日期,格式为 dd
)
rmvl_generate_para
根据指定的目标名在 param 文件夹下对应的 *.para
参数规范文件和可选的模块名生成对应的 C++ 代码
用法
rmvl_generate_para(
<target_name>
[MODULE module_name]
)
示例
rmvl_generate_para(
mytarget # 目标名称
MODULE mymodule # 模块名称为 mymodule
)
rmvl_generate_module_para
根据给定模块下所有的 para 目标,生成对应的 C++ 代码
用法
rmvl_generate_module_para(
<module_name>
)
示例
rmvl_generate_module_para(combo)