C++ Cmake如何查找文件?
我正在尝试使用cmake编译freepv() freepv需要一些模块,如zlib。我下载了这个模块的开发者版本,并将其复制到我的硬盘上 cmake中包含一个文件,告诉cmake在哪里可以找到zlib库C++ Cmake如何查找文件?,c++,cmake,C++,Cmake,我正在尝试使用cmake编译freepv() freepv需要一些模块,如zlib。我下载了这个模块的开发者版本,并将其复制到我的硬盘上 cmake中包含一个文件,告诉cmake在哪里可以找到zlib库 ######################################################################### # # # FreePV's
#########################################################################
# #
# FreePV's Script #
# #
#***********************************************************************#
# This FreePV script tries to find jpeg library and header files #
# ZLIB_INCLUDE_DIR, headers path. #
# ZLIB_LIBRARIES, libraries needed. #
# ZLIB_FOUND, either true or false. #
#########################################################################
IF(WIN32)
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
${CMAKE_INCLUDE_PATH}
$ENV{include}
)
SET(ZLIB_NAMES z zlib zlib1 zlib1d zdll)
FIND_LIBRARY(ZLIB_LIBRARY
NAMES ${ZLIB_NAMES}
PATHS ${CMAKE_LIBRARY_PATH} $ENV{lib}
)
ELSE(WIN32)
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
/usr/local/include
/usr/include
)
SET(ZLIB_NAMES z zlib zdll)
FIND_LIBRARY(ZLIB_LIBRARY
NAMES ${ZLIB_NAMES}
PATHS /usr/lib /usr/local/lib
)
ENDIF(WIN32)
IF (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
SET(ZLIB_FOUND TRUE)
SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
ENDIF (ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
IF(NOT ZLIB_FOUND)
IF (ZLIB_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find ZLIB")
ENDIF (ZLIB_FIND_REQUIRED)
ENDIF(NOT ZLIB_FOUND)
我的问题是:
我应该在哪里复制我为zlib下载的文件
我是否可以复制硬盘中的一些位置,然后设置一个名为:ZLIB_INCLUDE_DIR的环境变量
CMake FIND_PATH是如何工作的?您没有说明您是在Windows还是Linux/Unix等平台上,因为上面的脚本对这两个部分的处理方式不同 让我们从非窗口开始:
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
/usr/local/include
/usr/include
)
这只是在两个给定目录中搜索名为zlib.h
的文件,并将CMAKE变量zlib_INCLUDE_DIR设置为找到该文件的目录
同样的事情也发生在库中,但奇怪的是,为了好玩,反过来又发生了同样的事情(看起来像一个bug,想象一下您在/usr/lib和/usr/local/lib中安装了zlib,这将包含和两个不同版本的库混在一起)
因此,简单的方法是只调用FindZLIB
,这样效果更好。。。(见附件)
对于Windows平台来说,这也很奇怪:
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
${CMAKE_INCLUDE_PATH}
$ENV{include}
)
这将在CMAKE_include_PATH(请参阅)中设置的所有默认include目录中查找zlib.h
文件,如果未在其中找到该文件,则在环境变量include
中设置的路径中查找
SET(ZLIB_NAMES z zlib zlib1 zlib1d zdll)
FIND_LIBRARY(ZLIB_LIBRARY
NAMES ${ZLIB_NAMES}
PATHS ${CMAKE_LIBRARY_PATH} $ENV{lib}
)
对于类似的dll列表,此时将搜索CMAKE_LIBRARY_路径或环境变量LIB的内容
但是,如果你已经知道正确的道路,你可以简单地做:
SET(ZLIB_INCLUDE_DIR /path/to/the/zlib/include/dir)
SET(ZLIB_LIBRARIES /path/to/the/libary)
SET(ZLIB_FOUND TRUE)
忽略上面的全部代码…好吧,CMake实际上已经有了自己的逻辑来查找ZLIB,所以这可能只是项目中的老东西()。但是如果您只需要查找路径的文档,它们就在这里
SET(ZLIB_INCLUDE_DIR /path/to/the/zlib/include/dir)
SET(ZLIB_LIBRARIES /path/to/the/libary)
SET(ZLIB_FOUND TRUE)