使用:CMake 3.13.2
我正在尝试创建FindLibrary.cmake
文件以查找库。
我有2个问题:
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
是环境变量。
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版本有关吗?还是您不知道为什么我得到这些结果?
答案 0 :(得分:0)
对于第一点,按照Fred的建议使用HINTS
和PATH_SUFFIXES
效果更好。根据{{3}} PATHS
,是硬编码的路径“猜测”,它指向标头可能所在的位置。因此,必须使用HINTS
和PATH_SUFFIXES
。 HINTS
给出了查找位置的想法(在我的情况下为环境变量),PATH_SUFFIXES
指定了要检查的其他子目录(在这种情况下为LIBTOFIND
)。
find_path(LIBTOFIND_INCLUDE_DIR NAMES header.h
HINTS
ENV LIBTOFIND
PATH_SUFFIXES include/headers/)
对于第二点,我不确定为什么要指定扩展名,因为这似乎很正常。我不明白的是为什么其他人没有指定它却仍然有效。