【cmake教程】find_path、find_library、find_program
目录
1、find_path
2、find_library
3、find_program
find_path 参考文章:CMake中find_path的使用-CSDN博客
find_library 参考文章:CMake中find_library的使用
1、find_path
find_path 一般用于在某个目录下查找一个或者多个头文件,命令的执行结果会保存到 <VAR> 中。
(1) 格式
find_path 的格式如下:
find_path (<VAR>NAMES name1 [name2 ...] [HINTS [path | ENV var]... ][PATHS [path | ENV var]... ][NO_CACHE][REQUIRED]
)
选项解析:
- <VAR>:用于保存命令的执行结果
- NAMES:要查找的头文件
- HINTS | PATHS
- HINTS:先搜索指定路径,后搜索系统路径
- PATHS:先搜索系统路径,后搜索
- NO_CACHE:搜索结果将存储在普通变量中而不是缓存条目(即CMakeCache.txt)中
- REQUIRED:如果没有找到指定头文件,就出发错误提示,变量会设为 <VAR>-NOTFOUND
执行结果:
查找成功时,会向变量<VAR>中添加成功找到头文件的目录,如果在某个路径下查找多个头文件,只要查找到多个头文件中的某一个,也算执行成功。
注意:
虽然HINTS / PATHS后面可以跟多条路径,但是每次只会向变量中<VAR>添加一个目录,那就是成功找到头文件的目录。
(2) 举例
在一条指定路径下查找头文件:
unset(INCLUDE_DIR CACHE) # 清除之前的缓存
find_path(INCLUDE_DIR # 在指定路径下查找 gather.hNAMES gather.h# 虽然有多条路径,但只会把含当前头文件的目录加入到 INCLUDE_DIR 中HINTS ${PROJECT_SOURCE_DIR}/vac/util ${PROJECT_SOURCE_DIR}/app1
)
message("${INCLUDE_DIR}")
在多条路径下查找头文件:
unset(INCLUDE_DIR CACHE) # 清除变量 INCLUDE_DIR 之前的缓存
find_path(INCLUDE_DIR NAMES gather.hHINTS ${PROJECT_SOURCE_DIR}/vac/util ${PROJECT_SOURCE_DIR}/app1
)
list(APPEND ADD_INCLUDE_DIR ${INCLUDE_DIR}) # 以追加的方式添加到 ADD_INCLUDE_DIR
message("${INCLUDE_DIR}")unset(INCLUDE_DIR CACHE) # 清除变量 INCLUDE_DIR 之前的缓存
find_path(INCLUDE_DIR NAMES mul.hHINTS ${PROJECT_SOURCE_DIR}/vac/util ${PROJECT_SOURCE_DIR}/app1
)
list(APPEND ADD_INCLUDE_DIR ${INCLUDE_DIR}) # 以追加的方式添加到 ADD_INCLUDE_DIR
message("${INCLUDE_DIR}")message("${ADD_INCLUDE_DIR}")
2、find_library
find_library 一般直接去查找依赖库文件,和find_package 不一样,find_package 找的是 .cmake 文件,而find_library 直接找 .so 或者 .a 文件。
(1) 格式
相关选项解析可以参考 find_path
find_library (<LIBRARY_NAME>NAMES name1 [name2 ...] [NAMES_PER_DIR][HINTS [path | ENV var]... ][PATHS [path | ENV var]... ][NO_CACHE][REQUIRED]
)
选项解析:
- LIBRARY_NAME:库名。允许两种形式,前缀+库名+后缀、只有库名。
- NAMES_PER_DIR:表示一个名称遍历查找一次。而不是在某个路径下,查看是否存在多个库
执行结果:
查找成功时,会向变量<LIBRARY_NAME>中添加成功找到头文件的库文件(包含完整路径),如果在某个路径下查找多个头文件,只要查找到多个头文件中的某一个,也算执行成功。
注意:
虽然HINTS / PATHS后面可以跟多条路径,但是每次只会向变量中<VAR>添加一个目录,那就是成功找到头文件的目录。
(2) 举例
查找一个或者多个路径也可以参考 find_path
unset(LIBS CACHE) # 清空变量LIB_DIR
find_library(LIBSNAMES libopencv_core.so # 前缀+库名+后缀HINTS /home/gzx/toolchain/opencv-3.4.10/build/lib
)
message("${LIBS}") # /home/gzx/toolchain/opencv-3.4.10/build/lib/libopencv_core.sounset(LIBS CACHE) # 清空变量LIB_DIR
find_library(LIBSNAMES opencv_highgui # 只有库名HINTS /home/gzx/toolchain/opencv-3.4.10/build/lib
)
message("${LIBS}") # /home/gzx/toolchain/opencv-3.4.10/build/lib/libopencv_highgui.so
3、find_program
find_program 一般用于查找指定名称的可执行文件。相关内容可以参考find_path 或者 find_library
find_program (<VAR>name | NAMES name1 [name2 ...] [NAMES_PER_DIR][HINTS [path | ENV var]... ][PATHS [path | ENV var]... ][NO_CACHE][REQUIRED]
)