优书网,沈阳seo关键词,线上推广策划方案范文,网站建设需求有什么用#x1f608;「CSDN主页」#xff1a;传送门 #x1f608;「Bilibil首页」#xff1a;传送门 #x1f608;「本文的内容」#xff1a;CMake入门教程 #x1f608;「动动你的小手」#xff1a;点赞#x1f44d;收藏⭐️评论#x1f4dd; 文章目录 1.使用方法1.1基本用… 「CSDN主页」传送门 「Bilibil首页」传送门 「本文的内容」CMake入门教程 「动动你的小手」点赞收藏⭐️评论 文章目录 1.使用方法1.1基本用法1.2导入软件包的设置1.3自定义软件包的查找路径1.4使用 Find 模块文件1.5设置软件包的变量 2.示例2.1查找并导入 OpenCV 软件包2.2查找并导入 Boost 软件包的特定组件2.3查找自定义的 Find 模块文件 3.find_package的查找目录 1.使用方法
1.1基本用法 find_package 是 CMake 中用于查找和加载外部软件包的命令。它可以用于查找已经安装在系统中的软件包并将其相关的设置导入到 CMake 构建系统中。下面是 find_package 的一些常见用法和技巧 find_package(package [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [COMPONENTS components])package 是要查找的软件包的名称version 是软件包的版本号可选。EXACT 选项可指定要求精确的版本匹配。QUIET 选项可使命令在查找失败时不产生错误信息。MODULE 选项用于指定要查找的模块文件。REQUIRED 选项表示软件包是必需的如果找不到将会引发错误。COMPONENTS 选项用于指定软件包的组件。 1.2导入软件包的设置
find_package(package [version] [EXACT] [REQUIRED] [COMPONENTS components])
if(package_FOUND)include_directories(${package_INCLUDE_DIRS})target_link_libraries(target ${package_LIBRARIES})
endif()在找到软件包后可以使用 ${package_INCLUDE_DIRS} 和 ${package_LIBRARIES} 变量来导入软件包的头文件路径和库文件路径并将其添加到相应的构建目标中。 1.3自定义软件包的查找路径
set(package_DIR path)
find_package(package [version] [EXACT] [REQUIRED] [COMPONENTS components])可以使用 set(package_DIR path) 命令来设置软件包的查找路径其中 path 是软件包的安装路径。这样find_package 命令将会在指定的路径下查找软件包。 1.4使用 Find 模块文件
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} path)
find_package(package [version] [EXACT] [REQUIRED] [COMPONENTS components])可以使用 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} path) 命令将自定义的 Find 模块文件所在的路径添加到 CMake 模块搜索路径中。然后find_package 命令将会在指定的路径下查找模块文件。 1.5设置软件包的变量
set(package_DIR path)
find_package(package [version] [EXACT] [REQUIRED] [COMPONENTS components])
if(package_FOUND)message(Found package: ${package_VERSION})
endif()在找到软件包后可以使用 ${package_VERSION} 变量来获取软件包的版本信息并进行相应的处理。 2.示例
2.1查找并导入 OpenCV 软件包
find_package(OpenCV 4.2.0 REQUIRED)
if(OpenCV_FOUND)include_directories(${OpenCV_INCLUDE_DIRS})target_link_libraries(my_project ${OpenCV_LIBRARIES})
endif()在此示例中我们使用 find_package 命令来查找 OpenCV 软件包并指定所需的最低版本为 4.2.0。如果找到了 OpenCV我们将导入其头文件路径和库文件路径并将其链接到名为 my_project 的目标中。 2.2查找并导入 Boost 软件包的特定组件
find_package(Boost 1.75.0 REQUIRED COMPONENTS filesystem system)
if(Boost_FOUND)include_directories(${Boost_INCLUDE_DIRS})target_link_libraries(my_project ${Boost_LIBRARIES})
endif()在此示例中我们使用 find_package 命令来查找 Boost 软件包并指定所需的最低版本为 1.75.0。我们还指定了需要的组件即 filesystem 和 system。如果找到了 Boost并且所需的组件也可用我们将导入其头文件路径和库文件路径并将其链接到 my_project 目标中。 2.3查找自定义的 Find 模块文件
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /path/to/FindCustomPackage.cmake)
find_package(CustomPackage REQUIRED)
if(CustomPackage_FOUND)include_directories(${CustomPackage_INCLUDE_DIRS})target_link_libraries(my_project ${CustomPackage_LIBRARIES})
endif()在此示例中我们将自定义的 Find 模块文件的路径添加到 CMake 模块搜索路径中并使用 find_package 命令来查找名为 CustomPackage 的软件包。如果找到了 CustomPackage我们将导入其头文件路径和库文件路径并将其链接到 my_project 目标中。 3.find_package的查找目录
find_package 命令在 CMake 中用于查找和加载外部库或软件包。它按照特定的顺序在多个目录中搜索指定的软件包。这些搜索目录包括
CMake变量指定的路径 CMAKE_PREFIX_PATH一个或多个路径的列表CMake会在这些路径下查找软件包。PackageName_DIR对于特定软件包可以设置一个变量来指定其配置文件的路径例如对于Foo包设置Foo_DIR。 系统默认路径 在 Unix-like 系统上通常包括 /usr/local、/usr 等标准安装路径。在 Windows 系统上可能包括一些特定于 Windows 的标准路径如程序安装目录。 环境变量指定的路径 CMAKE_SYSTEM_PREFIX_PATH系统环境变量指定的路径列表例如在 Unix 系统上可能包括/usr/local/等。其他特定于系统的环境变量如LD_LIBRARY_PATH或PATH。 CMake模块路径 CMAKE_MODULE_PATH这个变量可以用来指定自定义的“Find模块”的路径。通过将自定义模块路径添加到这个变量可以让find_package使用这些自定义模块来查找软件包。 预定义的CMake模块 CMake还包含了一组预定义的模块这些模块定义了常用软件包的查找逻辑。这些模块通常位于 CMake 安装目录的Modules子目录中。
find_package 首先尝试使用配置模式即查找软件包提供的配置文件如FooConfig.cmake或foo-config.cmake如果失败则回退到模块模式使用 CMake 提供或自定义的 Find 模块如FindFoo.cmake。
正确设置这些路径可以确保 CMake 能够在预期的位置找到所需的软件包 #mermaid-svg-B0Rkv2zA1WHkAnml {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml .error-icon{fill:#552222;}#mermaid-svg-B0Rkv2zA1WHkAnml .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-B0Rkv2zA1WHkAnml .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-B0Rkv2zA1WHkAnml .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-B0Rkv2zA1WHkAnml .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-B0Rkv2zA1WHkAnml .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-B0Rkv2zA1WHkAnml .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-B0Rkv2zA1WHkAnml .marker{fill:#333333;stroke:#333333;}#mermaid-svg-B0Rkv2zA1WHkAnml .marker.cross{stroke:#333333;}#mermaid-svg-B0Rkv2zA1WHkAnml svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-B0Rkv2zA1WHkAnml .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml .cluster-label text{fill:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml .cluster-label span{color:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml .label text,#mermaid-svg-B0Rkv2zA1WHkAnml span{fill:#333;color:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml .node rect,#mermaid-svg-B0Rkv2zA1WHkAnml .node circle,#mermaid-svg-B0Rkv2zA1WHkAnml .node ellipse,#mermaid-svg-B0Rkv2zA1WHkAnml .node polygon,#mermaid-svg-B0Rkv2zA1WHkAnml .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-B0Rkv2zA1WHkAnml .node .label{text-align:center;}#mermaid-svg-B0Rkv2zA1WHkAnml .node.clickable{cursor:pointer;}#mermaid-svg-B0Rkv2zA1WHkAnml .arrowheadPath{fill:#333333;}#mermaid-svg-B0Rkv2zA1WHkAnml .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-B0Rkv2zA1WHkAnml .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-B0Rkv2zA1WHkAnml .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-B0Rkv2zA1WHkAnml .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-B0Rkv2zA1WHkAnml .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-B0Rkv2zA1WHkAnml .cluster text{fill:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml .cluster span{color:#333;}#mermaid-svg-B0Rkv2zA1WHkAnml div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-B0Rkv2zA1WHkAnml :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-B0Rkv2zA1WHkAnml .default*{fill:#f9f!important;stroke:#333!important;stroke-width:2px!important;}#mermaid-svg-B0Rkv2zA1WHkAnml .default span{fill:#f9f!important;stroke:#333!important;stroke-width:2px!important;} CMAKE_PREFIX_PATH _DIR Unix-like系统 Windows系统 CMAKE_SYSTEM_PREFIX_PATH LD_LIBRARY_PATH, PATH等 CMAKE_MODULE_PATH 开始find_package搜索 检查CMake变量 路径列表 特定软件包路径 系统默认路径 /usr/local, /usr等 特定于Windows的路径 环境变量指定路径 系统环境变量路径列表 其他系统环境变量 CMake模块路径 自定义Find模块路径 预定义CMake模块 CMake安装目录的Modules子目录