2014-04-21 6 views
2

cmake를 사용하여 freepv (http://freepv.sourceforge.net/)를 컴파일하려고합니다.Cmake는 어떻게 파일을 찾습니까?

freepv에는 zlib와 같은 일부 모듈이 필요합니다. 이 모듈의 개발자 버전을 다운로드하여 하드 디스크에 복사했습니다.

cmake에는 zake 라이브러리를 찾을 수있는 위치를 알려주는 파일이 있습니다.

######################################################################### 
#            # 
#    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가 작동합니까?

+0

음, CMake 실제로 ZLIB를 찾기 위해 자신의 논리가 이미 프로젝트의 오래된 것들이 될 것입니다 (https://github.com/Kitware/CMake/blob/master/Modules/FindZLIB.cmake). 그러나 FIND_PATH에 대한 문서가 필요한 경우 여기에 있습니다. http://www.cmake.org/cmake/help/cmake2.6docs.html#command:find_path – schlenk

답변

0

위의 스크립트가 두 부분에 대해 다른 작업을 수행하므로 Windows 또는 Linux/Unix 등에서 작업하고 있는지 알 수 없습니다.

이 아닌 창문을 시작할 수 있습니다 :

FIND_PATH(ZLIB_INCLUDE_DIR zlib.h 
    /usr/local/include 
    /usr/include 
) 

이 그냥 주어진 두 디렉토리에 zlib.h라는 이름의 파일을 검색하고 파일이 발견 된 디렉토리에 CMAKE 변수 ZLIB_INCLUDE_DIR을 설정합니다.

똑같은 일이 라이브러리에서 발생하지만, 이상하게도 다른 방법은 재미 있습니다 (버그처럼 보입니다. zlib가/usr/lib 및/usr/local/lib에 설치되어 있다고 가정하면 포함 및 라이브러리가 혼합됩니다). 두 가지 버전).

SET(ZLIB_NAMES z zlib zdll) 
FIND_LIBRARY(ZLIB_LIBRARY 
    NAMES ${ZLIB_NAMES} 
    PATHS /usr/lib /usr/local/lib 
) 

그래서 쉬운 방법은 (http://www.cmake.org/cmake/help/cmake2.6docs.html#module:FindZLIB 참조) ... 잘 작동하는 대신 FindZLIB를 호출하는 것입니다. 그 이상한뿐만 아니라 Windows 플랫폼을위한

: 이것은 모든 기본에 zlib.h 파일을 찾습니다

FIND_PATH(ZLIB_INCLUDE_DIR zlib.h 
    ${CMAKE_INCLUDE_PATH} 
    $ENV{include} 
) 

는 CMAKE_INCLUDE_PATH (http://www.cmake.org/Wiki/CMake_Useful_Variables 참조)하고있는 경우 설정 디렉토리 경로 설정에서,이 발견되지는 포함 환경 변수 include에 있습니다. dll을 유사한 표준시, 그냥이 시간 CMAKE_LIBRARY_PATH를 들어

SET(ZLIB_NAMES z zlib zlib1 zlib1d zdll) 
FIND_LIBRARY(ZLIB_LIBRARY 
    NAMES ${ZLIB_NAMES} 
    PATHS ${CMAKE_LIBRARY_PATH} $ENV{lib} 
) 

는 검색 또는 환경의 내용을 변수 LIB된다.

하지만 당신은 이미 올바른 경로를 알고있는 경우에 그렇습니다, 당신은 간단하게 수행 할 수 있습니다

SET(ZLIB_INCLUDE_DIR /path/to/the/zlib/include/dir) 
SET(ZLIB_LIBRARIES /path/to/the/libary) 
SET(ZLIB_FOUND TRUE) 

위의 전체 코드를 무시 ...

관련 문제