CMAKE关于FIND_LIBRARY和FIND_PATH

FIND_LIBRARY

FIND_LIBRARY()是一个用于查找.a,和.so库的CMAKE命令。
常用的用法如下:
(1)、查找.so库

  FIND_LIBRARY(G2O_SOLVER_EIGEN_LIB   
    NAMES g2o_solver_eigen    # lib前缀 和后缀名 .so 不需要写 
    PATHS /usr/local 
    PATH_SUFFIXES lib)

G2O_SOLVER_EIGEN_LIB:查找到库文件后,这个名字就是这个库的别名。
NAMES:为要查找的.so库标识名,注意要把lib前缀和.so后缀去掉,比如在这个例子中,查找的就是
libg2o_solver_eigen.so库。
PATHS:即查找的父目录。
PATH_SUFFIXES:指定了要搜索的子目录名称。

在这个例子中,PATH_SUFFIXES设置为lib,PATHS为/usr/local ,因此CMake将先去/usr/local父目录下搜索名为libg2o_solver_eigen.so库文件,如没没有搜索到,则会去/usr/local/lib子目录下搜索,其他的默认的预设路径下也会查找,默认路径包括 /usr/lib 和 /usr/local/lib 等。

如果不希望FIND_LIBRARY去默认的系统路径下查找则要加上NO_DEFAULT_PATH参数,如下:

  FIND_LIBRARY(G2O_SOLVER_EIGEN_LIB   
    NAMES g2o_solver_eigen    # lib前缀 和后缀名 .a需要保留
    PATHS /usr/local 
    PATH_SUFFIXES lib
    NO_DEFAULT_PATH)

(2)、.a库
和.so库类似,不过,NAMES指定的库标识名就不能把.a后缀和lib前缀去掉了,比如一个叫libg2o_solver_eigen.a的库,那么查找的指令为:

  FIND_LIBRARY(G2O_SOLVER_EIGEN_LIB   
    NAMES libg2o_solver_eigen.a    # lib前缀 和后缀名 .so 不需要写 
    PATHS /usr/local 
    PATH_SUFFIXES lib)

FIND_PATH

FIND_PATH用于查找文件或目文件夹的路径。
比如,我们要去寻找安装在/usr/local/include的g2o文件夹路径,可以使用:

FIND_PATH(G2O_INCLUDE_DIR
    NAMES g2o
    PATHS /usr/local/include
    NO_DEFAULT_PATH)  

G2O_INCLUDE_DIR:保存最终找到的路径,找不到的话为空
NAMES g2o:文件夹的名字是g2o
PATHS /usr/local/include:查找的目录是 /usr/local/include
NO_DEFAULT_PATH: 表示不会去系统默认的路径下搜索,而只在 PATHS下搜索

此外,可以判断是否查找成功,若失败则直接退出。

IF (G2O_INCLUDE_DIR)
    message(FATAL_ERROR "Could not find g2o include directory!")
 ENDIF (G2O_INCLUDE_DIR)

一点补充

可以看到FIND_LIBRARY和FIND_PATH都有一个参数-PATH_SUFFIXES,那么这个参数什么时候该用什么时候不该用呢?
下面是一个实例:
假设你想在两个目录 /usr/local 和 /opt/local 下查找名为 g2o 的文件或文件夹,且这两个目录都有一个名为 include 的子目录。你可以使用下面的 FIND_PATH 函数来完成这个任务:

FIND_PATH(G2O_INCLUDE_DIR
    NAMES g2o
    PATHS /usr/local /opt/local
    PATH_SUFFIXES include
    NO_DEFAULT_PATH)

在这个例子中,PATHS 选项指定了两个查找路径 /usr/local 和 /opt/local,而 PATH_SUFFIXES 选项指定了一个路径后缀 include。这意味着 FIND_PATH 函数会在 /usr/local/include 和 /opt/local/include 这两个目录下查找名为 g2o 的文件或文件夹。

如果不使用 PATH_SUFFIXES 选项,那么你需要手动指定这两个完整的查找路径,如下所示:

FIND_PATH(G2O_INCLUDE_DIR
    NAMES g2o
    PATHS /usr/local/include /opt/local/include
    NO_DEFAULT_PATH)

可以看到,第二种显然复杂多了,因此,使用 PATH_SUFFIXES 选项可以让你更简洁地指定查找路径,
同时,如果搜索路径就一个,那么直接选用PATHS进行指定就可以。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值