news 2026/4/18 12:48:25

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/18 2:09:05

GPT-SoVITS能否实现语音老化模拟?年龄变化预测

GPT-SoVITS能否实现语音老化模拟&#xff1f;年龄变化预测 在影视剧中&#xff0c;我们常看到角色从青年到暮年的声音悄然转变——语速变缓、声线沙哑、气息渐弱。这种跨越时间的声音叙事&#xff0c;过去依赖演员的即兴演绎或后期人工调音&#xff0c;效果往往不够自然。如今&…

作者头像 李华
网站建设 2026/4/18 7:30:28

终极指南:如何用Upscayl一键实现图片高清放大

终极指南&#xff1a;如何用Upscayl一键实现图片高清放大 【免费下载链接】upscayl &#x1f199; Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trending/up/…

作者头像 李华
网站建设 2026/4/18 5:34:10

Open-AutoGLM API密钥管理与安全对接,企业级最佳实践深度解析

第一章&#xff1a;Open-AutoGLM API对接概述Open-AutoGLM 是一款面向生成式语言模型服务的开放接口&#xff0c;支持开发者快速集成自然语言处理能力到自有系统中。该API提供文本生成、意图识别、对话管理等核心功能&#xff0c;适用于智能客服、内容创作和自动化流程等多种场…

作者头像 李华
网站建设 2026/4/18 5:35:18

MTK设备BROM模式连接问题终极解决方案

MTK设备BROM模式连接问题终极解决方案 【免费下载链接】bypass_utility 项目地址: https://gitcode.com/gh_mirrors/by/bypass_utility 当你在使用MTK设备进行刷机或系统修复时&#xff0c;是否遇到过设备无法正常建立BROM模式连接的问题&#xff1f;这种常见的连接故障…

作者头像 李华
网站建设 2026/4/17 8:50:33

【清华智谱最新智能体Open-AutoGLM系统】:揭秘国产AI自动代码生成黑科技

第一章&#xff1a;清华智谱最新智能体Open-AutoGLM系统概述Open-AutoGLM 是由清华大学与智谱AI联合研发的开源自动化机器学习智能体系统&#xff0c;旨在通过大语言模型驱动全流程机器学习任务&#xff0c;实现从数据预处理、特征工程到模型选择与调优的端到端自动化。该系统基…

作者头像 李华
网站建设 2026/4/18 7:03:16

你好,我是袋鼠帝。字节在编程工具(Trae)上面是国内最早发力的,但是编程模型迟迟没有推出。不过就在今天,字节终于!给豆包升级了编程能力,推出了他们的首款编程模型:Doubao-Seed-Code

你好&#xff0c;我是袋鼠帝。字节在编程工具&#xff08;Trae&#xff09;上面是国内最早发力的&#xff0c;但是编程模型迟迟没有推出。不过就在今天&#xff0c;字节终于&#xff01;给豆包升级了编程能力&#xff0c;推出了他们的首款编程模型&#xff1a;Doubao-Seed-Code…

作者头像 李华