CMake Error: ...Missing variable is: CMAKE_FIND_LIBRARY_

来源:互联网 发布:男友活好的体验知乎 编辑:程序博客网 时间:2024/06/16 19:14

今天在使用cmake的find_library命令时,cmake居然报错:

CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_FIND_LIBRARY_PREFIXES

意思就是CMAKE_FIND_LIBRARY_PREFIXES这个变量没有定义。代码片段如下:

#在给定义的搜索路径中查找OpenCL库find_library(OpenCL_LIBRARY  NAMES OpenCL  PATHS    ENV "PROGRAMFILES(X86)"    ENV AMDAPPSDKROOT    ENV INTELOCLSDKROOT    ENV CUDA_PATH    ENV NVSDKCOMPUTE_ROOT    ENV ATISTREAMSDKROOT  PATH_SUFFIXES    "AMD APP/lib/x86_64"    lib/x86_64    lib/x64    OpenCL/common/lib/x64)# 定义cmake最低版本要求    cmake_minimum_required( VERSION 2.6 ) # 定义项目名称project( facecl)# 如果未指定build类型(DEBUG/RELEASE),则默认为RELEASEif(NOT CMAKE_BUILD_TYPE )  set(CMAKE_BUILD_TYPE RELEASE)endif()

CMAKE_FIND_LIBRARY_PREFIXES是cmake默认定义的变量啊,怎么会没有定义?
没想明白,后来发现是因为find_library代码的位置不对,当时我只是为了测试find_library是否有效,随便将语句放在CMakeLists.txt的最前面了,才会出现这个报错。
find_library放在project( facecl)之后
就能正确找到指定的library。
通过message命令打印变量信息表明:
project( facecl)语句之前,CMAKE_FIND_LIBRARY_PREFIXES这个变量的确没有初始化(CMAKE_STATIC_LIBRARY_SUFFIXCMAKE_IMPORT_LIBRARY_SUFFIX等这些变量也是一样),在project( facecl)之后,它才被初始化成正确的值,所以写cmake代码的时候,一定要注意尽可能将project语句放在代码最前面,就可以避免这些低级且烦人的报错带来的麻烦。

0 0
原创粉丝点击