版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51282749
今天在使用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),则默认为RELEASE
if(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_SUFFIX
、
CMAKE_IMPORT_LIBRARY_SUFFIX
等这些变量也是一样),在
project( facecl)
之后,它才被初始化成正确的值,所以写cmake代码的时候,一定要注意尽可能将project语句放在代码最前面,就可以避免这些低级且烦人的报错带来的麻烦。