北京网站设计公司招聘信息,微信公众号和小程序的区别,网站如何适应屏幕,难道做网站必须用vue框架吗1 find_package的作用
find_package是CMake中用于查找并加载外部库的指令。它可以根据指定的参数在系统或用户指定的路径中查找库文件#xff0c;并生成相应的变量供后续使用。
2 find_package基本语法
find_package(PackageName [version] [EXACT] [QUIET] [MODUL…1 find_package的作用
find_package是CMake中用于查找并加载外部库的指令。它可以根据指定的参数在系统或用户指定的路径中查找库文件并生成相应的变量供后续使用。
2 find_package基本语法
find_package(PackageName [version] [EXACT] [QUIET] [MODULE][REQUIRED] [[COMPONENTS] [components...]][OPTIONAL_COMPONENTS components...][NO_POLICY_SCOPE])参数解释 version: 版本合适大版本号相同 EXACT: 版本必须一致 QUIET: 没找到包也不会报错 REQUIRED: 必须找到该包否则停止
用法举例
// 查找名为 OpenCV 的包找不到不报错也不打印任何信息。
find_package(OpenCV QUIET)// 查找名为 OpenCV 的包找不到就报错并终止 cmake 进程不再继续往下执行
find_package(OpenCV REQUIRED) # 最常见用法// 查找名为 OpenCV 的包找不到就报错且必须具有 OpenCV::core 和 OpenCV::videoio 这两个组件如果没有这两个组件也会报错
find_package(OpenCV REQUIRED COMPONENTS core videoio)//查找名为 OpenCV 的包找不到就报错可具有 OpenCV::core 和 OpenCV::videoio 这两个组件没有这两组件不会报错通过 ${OpenCV_core_FOUND} 查询是否找到 core 组件。
find_package(OpenCV REQUIRED OPTIONAL_COMPONENTS core videoio)3 find_package的寻找路径
find_package指令会在以下路径下查找包
系统默认路径find_package会首先在系统默认的路径中查找包。这些路径通常包括一些常用的包管理器和操作系统提供的包目录。
CMake模块路径如果CMake模块被启用find_package还会在CMake模块路径中查找包。可以通过设置CMAKE_MODULE_PATH变量来指定额外的模块路径。
用户指定的路径可以使用CMAKE_PREFIX_PATH变量来指定额外的搜索路径。这样find_package就会在这些指定的路径中查找包。
项目路径如果当前正在处理的项目有定义了CMAKE_PREFIX_PATH变量那么find_package也会在该项目的路径中查找包。
总之find_package会在系统默认路径、CMake模块路径、用户指定的路径以及项目路径中进行包的查找。
4 find_package的两种找包模式
4.1 Module mode和config mode介绍
find_package指令有两种查找包的模式模块模式Module mode和配置模式Config mode。
模块模式Module mode在模块模式下find_package会在指定的路径中查找名为 package -config.cmake的文件。如果找到了这个文件那么它会将该文件所在的目录添加到包含目录中并生成相应的变量如 package_INCLUDE_DIRS、 package_LIBRARIES等。这样你就可以在项目中使用这个包提供的头文件和库文件了。
配置模式Config mode在配置模式下find_package会在指定的路径中查找名为 packageConfig.cmake的文件。如果找到了这个文件那么它会将该文件所在的目录添加到包含目录中并生成相应的变量如 package_INCLUDE_DIRS、 package_LIBRARIES等。然后它会调用该文件中的add_subdirectory()函数将子目录中的模块和配置模式的包也加入到查找过程中。这样你就可以在项目中使用这个包提供的头文件、库文件以及子目录中的其他包了。
4.2 Module mode和config mode使用举例
模块模式Module mode和配置模式Config mode是find_package指令的两种查找包的模式。下面分别给出两种模式的使用举例
模块模式Module mode 假设我们有一个名为example的包它提供了一个名为Example的模块。我们可以使用模块模式来查找和使用这个包。 首先在CMakeLists.txt文件中添加以下内容
# 设置寻找路径
set(CMAKE_PREFIX_PATH /path/to/search1 /path/to/search2)# 查找名为example的包
find_package(example REQUIRED)# 使用包中的模块
include_directories(${example_INCLUDE_DIRS})
add_executable(my_app main.cpp)
target_link_libraries(my_app ${example_LIBRARIES})
在这个例子中find_package会在指定的路径中查找名为example的包。如果找到了这个包它会将该包所在的目录添加到包含目录中并生成相应的变量如example_INCLUDE_DIRS、example_LIBRARIES等。然后我们可以在项目中使用这个包提供的头文件和库文件。
配置模式Config mode 假设我们有一个名为example的包它提供了一个名为ExampleConfig.cmake的配置脚本。我们可以使用配置模式来查找和使用这个包。 首先在CMakeLists.txt文件中添加以下内容
# 设置寻找路径
set(CMAKE_PREFIX_PATH /path/to/search1 /path/to/search2)# 查找名为example的包
find_package(example REQUIRED)# 使用包中的配置脚本
include_directories(${example_INCLUDE_DIRS})
add_executable(my_app main.cpp)
target_link_libraries(my_app ${example_LIBRARIES})在这个例子中find_package会在指定的路径中查找名为example的包。如果找到了这个包它会将该包所在的目录添加到包含目录中并生成相应的变量如example_INCLUDE_DIRS、example_LIBRARIES等。然后它会调用该配置文件中的add_subdirectory()函数将子目录中的模块和配置模式的包也加入到查找过程中。这样我们就可以在项目中使用这个包提供的头文件、库文件以及子目录中的其他包了。