[CMake] Questions on CMAKE_CONFIGURATION_TYPES

Michael Schildt michael.schildt at ifn-magdeburg.de
Mon Mar 29 10:29:45 EDT 2010


Thank you

for the example, Ryan. It makes some aspects of writing an Find* Modul clearer and more concret to me. It will be useful for me in the near future.

Michael

> On 3/26/10 5:22 AM, Michael Schildt wrote:
> >/
> />>/ You don't generally need to use link-directories - if you're using
> />>/ imported targets from a *Config.cmake file, the build type choice I
> />>/ would imagine is automatic (?), 
> />/ Yes, that is that the former guys wrote and it is really working this 
> />/ easy way now.
> />/
> />>/ and if not you should be passing full
> />>/ paths to the library files in target_link_libraries, where you can
> />>/ specify using the debug, optimized, and general keywords.
> />/ For external lib not using cmake i will use something like
> />/
> />/ /TARGET_LINK_LIBRARIES( Project1     debug 
> />/ //F:/Extern////Lib1/Debug/test1.lib//
> />/ /    optimized //F:/Extern//Lib1/Release/test1.lib
> />/     )
> />/ /
> />/
> />/ But i have not tested yet. i suggest to add this to the FAQ because i 
> />/ missed it there very much.
> />/
> />/ Ciao,
> />/    Michael
> /Instead of hard-coding the paths in your CMakeLists.txt, I'd suggest 
> using the find_library and find_path (for include_directories) to 
> attempt to find the libraries in some area, and to allow the developer 
> to change the library/include paths by editing a cache variable with the 
> CMake GUI.  At least to me, I code my CMakeLists files for all projects 
> as if the project were open source and might be built by folks who had 
> just installed the dependencies either a: in their default locations 
> (where I want to auto-detect them), or b: in some strange location (if 
> they configured a different install location, I want them to be able to 
> configure the build of the project similarly.)  As a result, I create 
> Find*.cmake modules for every dependency that provide a 
> WHATEVER_ROOT_DIR cache variable, used to generate appropriate paths to 
> pass as "HINTS" to the find_library/path calls, that is not marked as 
> advanced until the full library is found, as well as the individual 
> _LIBRARY and _INCLUDE_DIR cache vars that are marked as advanced 
> automatically in all cases.  I've pasted an example below.
>
> Ryan
>
> ---- FindVRPN.cmake ----
>
> # - try to find VRPN library
> #
> # Cache Variables:
> #  VRPN_LIBRARY
> #  VRPN_SERVER_LIBRARY
> #  VRPN_INCLUDE_DIR
> #
> # Non-cache variables you might use in your CMakeLists.txt:
> #  VRPN_FOUND
> #  VRPN_SERVER_LIBRARIES
> #  VRPN_LIBRARIES
> #  VRPN_INCLUDE_DIRS
> #
> # VRPN_ROOT_DIR is searched preferentially for these files
> #
> # Requires these CMake modules:
> #  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
> #
> # Original Author:
> # 2009-2010 Ryan Pavlik <rpavlik at iastate.edu <http://www.cmake.org/mailman/listinfo/cmake>> <abiryan at ryand.net <http://www.cmake.org/mailman/listinfo/cmake>>
> # http://academic.cleardefinition.com
> # Iowa State University HCI Graduate Program/VRAC
>
> set(VRPN_ROOT_DIR
>      "${VRPN_ROOT_DIR}"
>      CACHE
>      PATH
>      "Root directory to search for VRPN")
>
> if("${CMAKE_SIZEOF_VOID_P}" MATCHES "8")
>      set(_libsuffixes lib64 lib)
> else()
>      set(_libsuffixes lib)
> endif()
>
> ###
> # Configure VRPN
> ###
>
> find_path(VRPN_INCLUDE_DIR
>      NAMES
>      vrpn_Connection.h
>      PATH_SUFFIXES
>      include
>      include/vrpn
>      HINTS
>      "${VRPN_ROOT_DIR}")
>
> find_library(VRPN_LIBRARY
>      NAMES
>      vrpn
>      PATH_SUFFIXES
>      ${_libsuffixes}
>      HINTS
>      "${VRPN_ROOT_DIR}")
>
> find_library(VRPN_SERVER_LIBRARY
>      NAMES
>      vrpnserver
>      PATH_SUFFIXES
>      ${_libsuffixes}
>      HINTS
>      "${VRPN_ROOT_DIR}")
>
> ###
> # Dependencies
> ###
> set(_deps_libs)
> set(_deps_includes)
> set(_deps_check)
>
> find_package(quatlib)
> list(APPEND _deps_libs ${QUATLIB_LIBRARIES})
> list(APPEND _deps_includes ${QUATLIB_INCLUDE_DIRS})
> list(APPEND _deps_check QUATLIB_FOUND)
>
> if(NOT WIN32)
>      find_package(Threads)
>      list(APPEND _deps_libs ${CMAKE_THREAD_LIBS_INIT})
>      list(APPEND _deps_check CMAKE_HAVE_THREADS_LIBRARY)
> endif()
>
>
> # handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
> # all listed variables are TRUE
> include(FindPackageHandleStandardArgs)
> find_package_handle_standard_args(VRPN
>      DEFAULT_MSG
>      VRPN_LIBRARY
>      VRPN_INCLUDE_DIR
>      ${_deps_check})
>
> if(VRPN_FOUND)
>      set(VRPN_INCLUDE_DIRS "${VRPN_INCLUDE_DIR}" ${_deps_includes})
>      set(VRPN_LIBRARIES "${VRPN_LIBRARY}" ${_deps_libs})
>      set(VRPN_SERVER_LIBRARIES "${VRPN_SERVER_LIBRARY}" ${_deps_libs})
>
>      mark_as_advanced(VRPN_ROOT_DIR)
> endif()
>
> mark_as_advanced(VRPN_LIBRARY
>      VRPN_SERVER_LIBRARY
>      VRPN_INCLUDE_DIR)
>
> -- 
> Ryan Pavlik
> Human-Computer Interaction Graduate Student
> Virtual Reality Applications Center
> Iowa State University
>
> rpavlik at iastate.edu <http://www.cmake.org/mailman/listinfo/cmake>
> http://academic.cleardefinition.com/

 <http://academic.cleardefinition.com/>



More information about the CMake mailing list