news 2026/9/3 3:47:40

cmake_查找文件find_file()命令,查找程序find_program()与查找库find_library()

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cmake_查找文件find_file()命令,查找程序find_program()与查找库find_library()

文章目录

  • 第二章 CMake基础语法
    • 2.16 CMake查找文件find_file()命令
      • 2.16.1 测试find_file搜索结果设置缓存变量
      • 2.16.2 给find_file指定目录
      • 2.16.3 给find_file指定路径和额外路径
    • 2.17 CMake查找程序find_program()与查找库find_library()
      • 2.17.1 find_program()
      • 2.17.2 find_library()

本文介绍CMake查找文件find_file()命令、查找程序find_program()与查找库find_library()。

第二章 CMake基础语法

2.16 CMake查找文件find_file()命令

CMake查找文件find_file()命令,默认从CMAKE_INCLUDE_PATH 路径中查找。
作用:使用find_file() 命令用于查找指定文件的完整路径。
语法格式:

find_file(<VAR>name1[path1 path2])<VAR>如果找到文件会将完整路径设置到VAR,否则为<VAR>-NOTFOUND NO_CACHE 若指定,结果则为普通变量,否则结果变量将被创建为缓存变量;REQUIRED 若没有找到任何内容,则停止处理并显示错误消息 NO_DEFAULT_PATH 若指定,表示不会去搜索额外的目录 NO_CMAKE_PATH:若指定,表示不会去搜索普通变量 CMAKE_PREFIX_PATH,CMAKE_INCLUDE_PATH,CMAKE_FRAMEWORK_PATH NO_CMAKE_ENVIRONMENT_PATH:若指定,表示不会去搜索环境变量 CMAKE_PREFIX_PATH,CMAKE_INCLUDE_PATH、CMAKE_FRAMEWORK_PATH

2.16.1 测试find_file搜索结果设置缓存变量

可以发现,find_file查找结果默认在缓存变量中;如果指定NO_CACHE之后,就不会设置为缓存变量了。

cmake_minimum_required(VERSION3.23)# 项目名字project(testFindFile)# 设置 find_file文件搜索路径:# CMAKE_SOURCE_DIR 顶层CMakeLists.txt 文件所在的目录.set(CMAKE_INCLUDE_PATH${CMAKE_SOURCE_DIR}/a)message("CMAKE_INCLUDE_PATH =${CMAKE_INCLUDE_PATH}")# CMAKE_INCLUDE_PATH = E:/cmakeLearning/chap2/11findfile/a# find_file 查找结果放在缓存变量中find_file(v1"a.h")message(普通变量 v1=${v1})# 普通变量v1=E:/cmakeLearning/chap2/11findfile/a/a.hmessage(缓存变量 v1=$CACHE{v1})# 缓存变量v1=E:/cmakeLearning/chap2/11findfile/a/a.hmessage("")# 查找没有的文件名find_file(v2"a.exe"NO_CACHE)message(普通变量 v2=${v2})# 普通变量v2=v2-NOTFOUNDmessage(缓存变量 V2=$CACHE{v2})# 缓存变量V2=

2.16.2 给find_file指定目录

find_file() 第三个参数指定搜索路径,下面分别演示了指定路径中文件存在和不存在的情况。

cmake_minimum_required(VERSION3.23)#查找文件 如果文件存在find_file(v1"a.h"${CMAKE_SOURCE_DIR}/a)message(普通变量 v1=${v1})# 指定文件所有路径find_file(v2"a.exe"${CMAKE_SOURCE_DIR}/a)message(普通变量 v2=${v2})# 查找文件find_file(v3"my.h")message(v3=${v3})#[[普通变量v1=E:/practice_Code/cmake/21findfile/a/a.h 普通变量v2=E:/practice_Code/cmake/21findfile/a/a.exev3=v3-NOTFOUND]]

2.16.3 给find_file指定路径和额外路径

CMAKE_INCLUDE_PATH普通变量给find_file指定目录,缓存CMAKE_INCLUDE_PATH给find_file 指定额外搜索目录。

#最低要求版本cmake_minimum_required(VERSION3.29)# 项目名字project(testFindFile)# 普通变量,搜索目录列表#set(CMAKE_INCLUDE_PATH ${CMAKE_SOURCE_DIR}/a)# 指定环境变量额外目录set(ENV{CMAKE_INCLUDE_PATH}${CMAKE_SOURCE_DIR}/a)message(普通变量CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH}")# 普通变量CMAKE_INCLUDE_PATH=message(环境变量CMAKE_INCLUDE_PATH=$ENV{CMAKE_INCLUDE_PATH})# 环境变量CMAKE_INCLUDE_PATH=E:/cmakeLearning/chap2/11findfile/a#查找文件find_file(v1"a.h")message(v1=${v1})# v1=E:/cmakeLearning/chap2/11findfile/a/a.h

2.17 CMake查找程序find_program()与查找库find_library()

2.17.1 find_program()

使用find_program()命令用于查找指定程序的完整路径。如果设置了CMAKE_LIBRARY_PATH,会去该目录下寻找,语法格式如下:

find_program(<VAR>NAMES<name1>[<name2>...][HINTS<dir1>[<dir2>...]][PATHS<dir1>[<dir2>...]][PATH_SUFFIXES<suffix1>[<suffix2>...]][DOC<string>][REQUIRED][NO_DEFAULT_PATH][NO_CACHE])<VAR>输出变量名,如果找到文件会将完整路径设置到VAR,否则为<VAR>-NOTFOUND NAMES:要找的程序名列表(Windows 可写git或 git.exe,CMake 会自动补全常见后缀) HINTS:提示路径(优先级高于 PATHS;适合你“猜测”安装位置) PATHS:指定额外搜索路径(优先级略低于 HINTS) PATH_SUFFIXES:在每个目录下再追加子目录(如 bin、Scripts) REQUIRED:找不到就直接报错终止配置 NO_DEFAULT_PATH:只在 HINTS/PATHS 中找,不搜系统PATH、注册表、默认目录等 NO_CACHE:不把结果写入缓存(一般不常用;默认会缓存到 CMakeCache.txt 里)

使用find_program 在环境变量和普通变量下寻找文件。

# 设置最低版本cmake_minimum_required(VERSION3.23)# 项目名字project(testFindFile)# 不指定目录,默认从当前路径下查找find_program(v2"a.exe")message(v2=${v2})#v2=v2-NOTFOUND# 查找 git,可写多个候选名find_program(GIT_EXE NAMESgitgit.exe DOC"Path to the git executable")message(STATUS"GIT_EXE =${GIT_EXE}")# -- GIT_EXE = GIT_EXE-NOTFOUNDadd_executable(testFindFile main.cpp)find_program(Test_EXE NAMES testFindFile testFindFile.exe DOC"Path to the git executable")message(STATUS"Test_EXE =${Test_EXE}")

2.17.2 find_library()

使用find_library()命令用于查找指定的库的完整路径。语法格式类似find_program(),如下:

find_library(<VAR>NAMES<name1>[<name2>...][HINTS<dir1>[<dir2>...]][PATHS<dir1>[<dir2>...]][PATH_SUFFIXES<suffix1>[<suffix2>...]][DOC<string>][REQUIRED][NO_DEFAULT_PATH][NO_CACHE])

库:Windows 常见 .lib,MinGW 常见 .a,Linux 常见 .so/.a,
如果找到,VAR保存完整路径;如果找不到,=-NOTFOUND
测试find_library()

# 设置最低版本cmake_minimum_required(VERSION3.23)# 项目名字project(testFindFile)# 不指定目录,默认从当前路径下查找find_program(v2"a.exe")message(v2=${v2})#v2=v2-NOTFOUND# 查找 git,可写多个候选名find_program(GIT_EXE NAMESgitgit.exe DOC"Path to the git executable")message(STATUS"GIT_EXE =${GIT_EXE}")# -- GIT_EXE = GIT_EXE-NOTFOUNDadd_executable(testFindFile main.cpp)find_program(Test_EXE NAMES testFindFile testFindFile.exe DOC"Path to the git executable")message(STATUS"Test_EXE =${Test_EXE}")# 在指定的目录下查找库文件find_library(MYLIB_LIB NAMES my.lib HINTS"E:/cmakeLearning/chap2/12findpro"PATH_SUFFIXES lib lib64 REQUIRED)message(STATUS"MYLIB_LIB =${MYLIB_LIB}")# MYLIB_LIB = E:/cmakeLearning/chap2/12findpro/my.lib
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 19:51:23

Steam Deck控制器Windows驱动配置完全手册

Steam Deck控制器Windows驱动配置完全手册 【免费下载链接】steam-deck-windows-usermode-driver A windows usermode controller driver for the steam deck internal controller. 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-windows-usermode-driver 让…

作者头像 李华
网站建设 2026/9/2 19:50:31

参数对比:一文看懂AT4V H00 vs 传统电流传感器 核心差异

在工业电流测量领域&#xff0c;传感器的性能直接决定系统控制精度、运行稳定性与综合成本。传统电流传感器&#xff08;含分立三相传感器、普通霍尔传感器&#xff09;在精度、同步性、抗干扰等方面的短板&#xff0c;往往成为工业生产的“隐形瓶颈”。芯森电子2025升级款AT4V…

作者头像 李华
网站建设 2026/9/2 19:50:53

Open-AutoGLM案例深度解析(工业级AutoML落地新范式)

第一章&#xff1a;Open-AutoGLM案例深度解析&#xff08;工业级AutoML落地新范式&#xff09;在智能制造与工业物联网快速演进的背景下&#xff0c;Open-AutoGLM作为新一代自动化机器学习框架&#xff0c;正重新定义工业场景下的模型开发流程。其核心优势在于将特征工程、模型…

作者头像 李华
网站建设 2026/9/2 19:52:14

从流量嗅探到威胁拦截:Snort入侵检测系统实战指南与前沿应用

Snort作为开源网络入侵检测系统&#xff08;NIDS&#xff09;的标杆&#xff0c;凭借轻量灵活、规则可定制、社区生态丰富三大核心优势&#xff0c;至今仍是中小企业、科研机构及安全团队构建网络防御体系的首选工具之一。它不仅能实现数据包的实时嗅探与离线记录&#xff0c;更…

作者头像 李华
网站建设 2026/9/2 11:30:25

热销榜单:2025年更佳动环监控系统推荐,助力智能机房管理新选择

在智能化管理日益发展的背景下&#xff0c;动环监控系统成为了机房管理中不可或缺的工具。它不仅具备实时监测和智能报警功能&#xff0c;还实现了远程控制&#xff0c;使运维人员能够随时掌握机房状态。这些系统通过收集电力、温湿度等环境数据&#xff0c;确保机房在良好的条…

作者头像 李华
网站建设 2026/9/2 19:53:44

Open-AutoGLM云手机冷启动优化实录:从30秒到2秒的极致突破

第一章&#xff1a;Open-AutoGLM云手机冷启动优化实录&#xff1a;从30秒到2秒的极致突破在Open-AutoGLM云手机项目中&#xff0c;冷启动时间曾长期维持在30秒以上&#xff0c;严重影响用户体验。通过系统级深度剖析与多维度协同优化&#xff0c;团队最终将冷启动耗时压缩至2秒…

作者头像 李华