news 2026/4/16 13:03:59

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/4/6 14:49:30

深入解析Go-Kratos Gateway:构建微服务架构的高性能API网关

深入解析Go-Kratos Gateway&#xff1a;构建微服务架构的高性能API网关 【免费下载链接】gateway A high-performance API Gateway with middlewares, supporting HTTP and gRPC protocols. 项目地址: https://gitcode.com/gh_mirrors/gateway8/gateway Go-Kratos Gatew…

作者头像 李华
网站建设 2026/4/15 14:16:37

DXF文件解析利器:用JavaScript轻松读取CAD设计数据

DXF文件解析利器&#xff1a;用JavaScript轻松读取CAD设计数据 【免费下载链接】dxf-parser A javascript parser for DXF files. It reads DXF file strings into one large javascript object with more readable properties and a more logical structure. 项目地址: http…

作者头像 李华
网站建设 2026/4/10 9:09:31

NTU VIRAL多传感器融合无人机数据集:从入门到精通的完整指南

NTU VIRAL多传感器融合无人机数据集&#xff1a;从入门到精通的完整指南 【免费下载链接】ntu_viral_dataset 项目地址: https://gitcode.com/gh_mirrors/nt/ntu_viral_dataset NTU VIRAL数据集是专为无人机多传感器融合研究设计的综合性基准数据集&#xff0c;集成了视…

作者头像 李华
网站建设 2026/4/10 2:10:53

从文本到高清视频只需5步(Open-AutoGLM全流程指南)

第一章&#xff1a;从文本到高清视频的生成革命人工智能正在以前所未有的速度重塑内容创作的边界。其中&#xff0c;从文本直接生成高清视频的技术突破&#xff0c;标志着多媒体生成领域进入全新纪元。借助深度学习模型与大规模视觉-语言对齐数据集&#xff0c;系统如今能够理解…

作者头像 李华
网站建设 2026/4/14 13:09:35

3步搞定Tesseract OCR多语言识别:新手也能快速上手的完整教程

3步搞定Tesseract OCR多语言识别&#xff1a;新手也能快速上手的完整教程 【免费下载链接】tessdata Tesseract Language Trained Data 项目地址: https://gitcode.com/gh_mirrors/tes/tessdata 想要让电脑"读懂"图片中的文字吗&#xff1f;Tesseract OCR语言…

作者头像 李华
网站建设 2026/4/16 9:53:55

springboot创新创业教育中心项目申报管理系统(11570)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华