为了理解如何链接库,有人建议我查看以下的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命令变成了什么?
非常感谢
答案 0 :(得分:1)
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)