Mike Jackson wrote:
Here is one I wrote for Expat:------8<------------------------------------------------ # - Find expat # Find the native EXPAT headers and libraries. # # EXPAT_INCLUDE_DIRS - where to find expat.h, etc. # EXPAT_LIBRARIES - List of libraries when using expat. # EXPAT_LIBRARY_DEBUG - Debug version of Library # EXPAT_LIBRARY_RELEASE - Release Version of Library # EXPAT_FOUND - True if expat found.
The macro below has been generalized and placed in the standard set of CMake modules with the 2.8 release. I saw it duplicated in enough places that I added it for general use in the Modules directory. It's called SelectLibraryConfigurations, you can get information about it by typing cmake --help-module SelectLibraryConfigurations. You don't have to use the standard one, but it's there if you need it. Let me know if you run into any trouble with it.
-- Will
############################################ # # Check the existence of the libraries. # ############################################ # This macro was taken directly from the FindQt4.cmake file that is included # with the CMake distribution. This is NOT my work. All work was done by the # original authors of the FindQt4.cmake file. Only minor modifications were # made to remove references to Qt and make this file more generally applicable ######################################################################### MACRO (ADJUST_LIB_VARS basename) IF (${basename}_INCLUDE_DIR) # if only the release version was found, set the debug variable also to the release version IF (${basename}_LIBRARY_RELEASE AND NOT ${basename}_LIBRARY_DEBUG) SET(${basename}_LIBRARY_DEBUG ${${basename}_LIBRARY_RELEASE}) SET(${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE}) SET(${basename}_LIBRARIES ${${basename}_LIBRARY_RELEASE}) ENDIF (${basename}_LIBRARY_RELEASE AND NOT ${basename}_LIBRARY_DEBUG) # if only the debug version was found, set the release variable also to the debug version IF (${basename}_LIBRARY_DEBUG AND NOT ${basename}_LIBRARY_RELEASE) SET(${basename}_LIBRARY_RELEASE ${${basename}_LIBRARY_DEBUG}) SET(${basename}_LIBRARY ${${basename}_LIBRARY_DEBUG}) SET(${basename}_LIBRARIES ${${basename}_LIBRARY_DEBUG}) ENDIF (${basename}_LIBRARY_DEBUG AND NOT ${basename}_LIBRARY_RELEASE) IF (${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE) # if the generator supports configuration types then set # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) SET(${basename}_LIBRARY optimized ${${basename}_LIBRARY_RELEASE} debug ${${basename}_LIBRARY_DEBUG}) ELSE(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) # if there are no configuration types and CMAKE_BUILD_TYPE has no value # then just use the release libraries SET(${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} ) ENDIF(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) SET(${basename}_LIBRARIES optimized ${${basename}_LIBRARY_RELEASE} debug ${${basename}_LIBRARY_DEBUG}) ENDIF (${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE) SET(${basename}_LIBRARY ${${basename}_LIBRARY} CACHE FILEPATH "The ${basename} library") IF (${basename}_LIBRARY) SET(${basename}_FOUND 1) ENDIF (${basename}_LIBRARY) ENDIF (${basename}_INCLUDE_DIR ) # Make variables changeble to the advanced user MARK_AS_ADVANCED(${basename}_LIBRARY ${basename}_LIBRARY_RELEASE ${basename}_LIBRARY_DEBUG ${basename}_INCLUDE_DIR ) ENDMACRO (ADJUST_LIB_VARS) # Look for the header file. # MESSAGE (STATUS "Finding expat library and headers..." ) SET (EXPAT_DEBUG 0) SET(EXPAT_INCLUDE_SEARCH_DIRS $ENV{EXPAT_INSTALL}/include ) SET (EXPAT_LIB_SEARCH_DIRS $ENV{EXPAT_INSTALL}/lib ) SET (EXPAT_BIN_SEARCH_DIRS $ENV{EXPAT_INSTALL}/bin ) FIND_PATH(EXPAT_INCLUDE_DIR NAMES expat.h PATHS ${EXPAT_INCLUDE_SEARCH_DIRS} NO_DEFAULT_PATH ) IF (WIN32 AND NOT MINGW) SET (EXPAT_SEARCH_DEBUG_NAMES "expatdll_D;libexpat_D") SET (EXPAT_SEARCH_RELEASE_NAMES "expatdll;libexpat") ELSE (WIN32 AND NOT MINGW) SET (EXPAT_SEARCH_DEBUG_NAMES "expat_debug") SET (EXPAT_SEARCH_RELEASE_NAMES "expat") ENDIF(WIN32 AND NOT MINGW) IF (EXPAT_DEBUG) message (STATUS "EXPAT_INCLUDE_SEARCH_DIRS: ${EXPAT_INCLUDE_SEARCH_DIRS}") message (STATUS "EXPAT_LIB_SEARCH_DIRS: ${EXPAT_LIB_SEARCH_DIRS}") message (STATUS "EXPAT_BIN_SEARCH_DIRS: ${EXPAT_BIN_SEARCH_DIRS}") message (STATUS "EXPAT_SEARCH_RELEASE_NAMES: ${EXPAT_SEARCH_RELEASE_NAMES}") message (STATUS "EXPAT_SEARCH_DEBUG_NAMES: ${EXPAT_SEARCH_DEBUG_NAMES}") ENDIF (EXPAT_DEBUG) # Look for the library. FIND_LIBRARY(EXPAT_LIBRARY_DEBUG NAMES ${EXPAT_SEARCH_DEBUG_NAMES} PATHS ${EXPAT_LIB_SEARCH_DIRS} NO_DEFAULT_PATH ) FIND_LIBRARY(EXPAT_LIBRARY_RELEASE NAMES ${EXPAT_SEARCH_RELEASE_NAMES} PATHS ${EXPAT_LIB_SEARCH_DIRS} NO_DEFAULT_PATH ) SET (EXPAT_XMLWF_PROG_NAME "xmlwf") IF (WIN32) SET (EXPAT_XMLWF_PROG_NAME "xmlwf.exe") ENDIF(WIN32) FIND_PROGRAM(EXPAT_XMLWF_PROG NAMES ${EXPAT_XMLWF_PROG_NAME} PATHS ${EXPAT_BIN_SEARCH_DIRS} NO_DEFAULT_PATH ) MARK_AS_ADVANCED(EXPAT_XMLWF_PROG) IF (EXPAT_DEBUG) MESSAGE(STATUS "EXPAT_INCLUDE_DIR: ${EXPAT_INCLUDE_DIR}") MESSAGE(STATUS "EXPAT_LIBRARY_DEBUG: ${EXPAT_LIBRARY_DEBUG}") MESSAGE(STATUS "EXPAT_LIBRARY_RELEASE: ${EXPAT_LIBRARY_RELEASE}") MESSAGE(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") endif(EXPAT_DEBUG) ADJUST_LIB_VARS(EXPAT) # MESSAGE( STATUS "EXPAT_LIBRARY: ${EXPAT_LIBRARY}") # Copy the results to the output variables. IF(EXPAT_INCLUDE_DIR AND EXPAT_LIBRARY) SET(EXPAT_FOUND 1) SET(EXPAT_LIBRARIES ${EXPAT_LIBRARY}) SET(EXPAT_INCLUDE_DIRS ${EXPAT_INCLUDE_DIR}) IF (EXPAT_LIBRARY_DEBUG) GET_FILENAME_COMPONENT(EXPAT_LIBRARY_PATH ${EXPAT_LIBRARY_DEBUG} PATH) SET(EXPAT_LIB_DIR ${EXPAT_LIBRARY_PATH}) ELSEIF(EXPAT_LIBRARY_RELEASE) GET_FILENAME_COMPONENT(EXPAT_LIBRARY_PATH ${EXPAT_LIBRARY_RELEASE} PATH) SET(EXPAT_LIB_DIR ${EXPAT_LIBRARY_PATH}) ENDIF(EXPAT_LIBRARY_DEBUG) IF (EXPAT_XMLWF_PROG) GET_FILENAME_COMPONENT(EXPAT_BIN_PATH ${EXPAT_XMLWF_PROG} PATH) SET(EXPAT_BIN_DIR ${EXPAT_BIN_PATH}) ENDIF (EXPAT_XMLWF_PROG) ELSE(EXPAT_INCLUDE_DIR AND EXPAT_LIBRARY) SET(EXPAT_FOUND 0) SET(EXPAT_LIBRARIES) SET(EXPAT_INCLUDE_DIRS) ENDIF(EXPAT_INCLUDE_DIR AND EXPAT_LIBRARY) # Report the results. IF(NOT EXPAT_FOUND) SET(EXPAT_DIR_MESSAGE "EXPAT was not found. Make sure EXPAT_LIBRARY and EXPAT_INCLUDE_DIR are set or set the EXPAT_INSTALL environment variable.") IF(NOT EXPAT_FIND_QUIETLY) MESSAGE(STATUS "${EXPAT_DIR_MESSAGE}") ELSE(NOT EXPAT_FIND_QUIETLY) IF(EXPAT_FIND_REQUIRED) # MESSAGE(FATAL_ERROR "${EXPAT_DIR_MESSAGE}") MESSAGE(FATAL_ERROR "Expat was NOT found and is Required by this project") ENDIF(EXPAT_FIND_REQUIRED) ENDIF(NOT EXPAT_FIND_QUIETLY) ENDIF(NOT EXPAT_FOUND) IF (EXPAT_FOUND) INCLUDE(CheckSymbolExists) ############################################# # Find out if EXPAT was build using dll's ############################################# # Save required variable SET(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) # Add EXPAT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${EXPAT_INCLUDE_DIRS}") CHECK_SYMBOL_EXISTS(EXPAT_BUILT_AS_DYNAMIC_LIB "expat_config.h" HAVE_EXPAT_DLL) IF (HAVE_EXPAT_DLL STREQUAL "TRUE") SET (HAVE_EXPAT_DLL "1") ENDIF (HAVE_EXPAT_DLL STREQUAL "TRUE") # Restore CMAKE_REQUIRED_INCLUDES and CMAKE_REQUIRED_FLAGS variables SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) # ############################################# ENDIF (EXPAT_FOUND) ------8<------------------------------------------------ _________________________________________________________ Mike Jackson mike.jack...@bluequartz.net BlueQuartz Software www.bluequartz.net Principal Software Engineer Dayton, Ohio On Tue, Feb 9, 2010 at 7:10 AM, Luigi Calori <l.cal...@cineca.it> wrote:Is there a way to instruct FindXXX modules to produce variables that have different linking in debug and release? I am producind a lib with suffix D (zlib) in an ExternalProjetAdd, target.It gets installed correctly in debug (which is the default for VS cmake--build) This zlibD.lib does not get found when other projects subsequently issues a find_package(ZLIB ) Are there Find modules that supports debug/release? Any example of this usage pattern? Thanks Luigi _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
-- Will Dicharry Software Developer Stellar Science Ltd Co
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake