CMake-来自find_path的_INCLUDE_DIR错误和来自find_library的_LIB_DIR错误

时间:2019-01-03 15:49:30

标签: c++ windows visual-studio-2015 cmake

使用:CMake 3.13.2
我正在尝试创建FindLibrary.cmake文件以查找库。
我有2个问题:

  1. find_path():当我尝试使用此方法从find_path获取include目录时 命令:
    find_path(LIBTOFIND_INCLUDE_DIR NAMES include/headers/header.h PATHS ENV LIBTOFIND)

    当我打印LIBTOFIND_INCLUDE_DIR时,只会得到<LIBTOFIND>而不是:<LIBTOFIND>/include/headers/-LIBTOFIND是环境变量。

  2. find_library():当我尝试使用以下命令查找库时:
    find_library(LIBTOFIND_LIB NAMES lib/libversion/LibName PATHS ENV LIBTOFIND)未找到库,因此我不得不将其更改为以下命令: find_library(LIBTOFIND_LIB NAMES lib/libversion/LibName.lib PATHS ENV LIBTOFIND)

    如您所见:我不得不提到库的全名,这是我在其他任何FindLibrary.cmake在线文件中都没有看到的。
    生成了解决方案(在标题或此问题的第1部分尝试了一些硬编码之后),但由于以下错误,我无法在Visual Studio中运行该项目:
    LNK1104 cannot open file 'LibName.lib'

这与cmake版本有关吗?还是您不知道为什么我得到这些结果?

1 个答案:

答案 0 :(得分:0)

对于第一点,按照Fred的建议使用HINTSPATH_SUFFIXES效果更好。根据{{​​3}} PATHS,是硬编码的路径“猜测”,它指向标头可能所在的位置。因此,必须使用HINTSPATH_SUFFIXESHINTS给出了查找位置的想法(在我的情况下为环境变量),PATH_SUFFIXES指定了要检查的其他子目录(在这种情况下为LIBTOFIND)。

find_path(LIBTOFIND_INCLUDE_DIR NAMES header.h
       HINTS 
           ENV LIBTOFIND
       PATH_SUFFIXES include/headers/)

对于第二点,我不确定为什么要指定扩展名,因为这似乎很正常。我不明白的是为什么其他人没有指定它却仍然有效。