Cmake: на примере findALSA.cmake - PullRequest
       6

Cmake: на примере findALSA.cmake

1 голос
/ 11 августа 2011

Чтобы понять, как связывать библиотеки, кто-то советует мне взглянуть на пример findALSA:

find_path(ALSA_INCLUDE_DIR NAMES asoundlib.h
          PATH_SUFFIXES alsa
          DOC "The ALSA (asound) include directory"
)

find_library(ALSA_LIBRARY NAMES asound
          DOC "The ALSA (asound) library"
)

# handle the QUIETLY and REQUIRED arguments and set ALSA_FOUND to TRUE if 
# all listed variables are TRUE
include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake")
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA DEFAULT_MSG ALSA_LIBRARY ALSA_INCLUDE_DIR)

if(ALSA_FOUND)
  set( ALSA_LIBRARIES ${ALSA_LIBRARY} )
  set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} )
endif()

mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY)

Что я не понимаю, так это:

if(ALSA_FOUND)
  set( ALSA_LIBRARIES ${ALSA_LIBRARY} )
  set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} )
endif()

Вопрос 1: Это потому, что ${ALSA_LIBRARY} и ${ALSA_INCLUDE_DIR} могут указывать только на один файл / один каталог?

Вопрос 2. Может ли кто-нибудь показать мне, как переписать пример, если я хочу связать 2 включаемых каталога и 2 библиотечных файла?

Допустим, у нас есть следующий пример:

/alsa/dir1/asound1.h
/alsa/dir2/asound2.h
/alsa/lib/libasound1.a
/alsa/lib/libasound2.a

Вопрос 3: в частности, что становится командой FIND_PACKAGE_HANDLE_STANDARD_ARGS?

Большое спасибо

1 Ответ

1 голос
/ 11 августа 2011
  1. Да, ASLI_LIBRARIES объединит их.

2 & 3: Определите в find_package_handle_standard_args только то, что требуется для корректной работы пакета.Код ниже для того, когда все требуется.

find_path(ALSA_INCLUDE_DIR1 NAMES asound1.h
          PATH_SUFFIXES alsa
          DOC "The ALSA (asound) include directory 1"
)

find_path(ALSA_INCLUDE_DIR2 NAMES asound2.h
          PATH_SUFFIXES alsa
          DOC "The ALSA (asound) include directory 2"
)

find_library(ALSA_LIBRARY2 NAMES asound1
          DOC "The ALSA (asound) library 1"
)

find_library(ALSA_LIBRARY2 NAMES asound2
          DOC "The ALSA (asound) library 2"
)

# handle the QUIETLY and REQUIRED arguments and set ALSA_FOUND to TRUE if 
# all listed variables are TRUE
include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake")
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA DEFAULT_MSG ALSA_LIBRARY1 ALSA_LIBRARY2 ALSA_INCLUDE_DIR1 ALSA_INCLUDE_DIR2)

if(ALSA_FOUND)
  set( ALSA_LIBRARIES ${ALSA_LIBRARY1} ${ALSA_LIBRARY2} )
  set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR1} ${ALSA_INCLUDE_DIR2} )
endif()

mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...