On 01/19/2011 07:24 PM, Alexander Neundorf wrote: > On Thursday 30 December 2010, Michael Wild wrote: >> On 12/30/2010 11:33 AM, Ian Monroe wrote: >>> To create my QyotoConfig.cmake I need to know the full path of a >>> library so that I can set a variable like QYOTO_LIBRARY. >>> >>> This is pretty standard requirement right? Its what we're supposed to >>> do in *Config.cmake's? >>> >>> So anyways, how do I that? The only target property that hasn't >>> returned NOTFOUND is LOCATION, which unhelpfully returns the location >>> of the library in the build directory. I could parse this to get the >>> file name, and then append it to the library install location... but >>> that seems like such a hack. Feels like I'm doing something wrong if I >>> need to use a hack to do something standard. >>> >>> I looked at install(EXPORT which could work, but it seems to include a >>> lot more information then is needed. I just want to set a variable >>> with the full path to a library. >>> >>> Ian >> >> That's not how *Config.cmake modules work. They're NOT Find*.cmake >> modules. You should: >> >> - add the targets to an export-set for usage from the build tree: >> >> export(TARGETS ... >> FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}LibraryDepends.cmake) >> >> - add the targets to an export-set for installation: >> >> install(TARGETS ... EXPORT ${CMAKE_PROJECT_NAME}LibraryDepends ...) >> >> - export the package for usage from the build tree (enter into some >> global registry): >> >> export(PACKAGE ${PROJECT_NAME}) >> >> - create a *Config.cmake file for the use from the build tree: >> >> set(QYOTO_INCLUDE_DIR ${CMAKE_SOURCE_DIR}) >> set(QYOTO_LIB_DIR ${CMAKE_BINARY_DIR}/lib) >> set(QYOTO_CMAKE_DIR ${CMAKE_BINARY_DIR}) >> configure_file(${CMAKE_PROJECT_NAME}Config.cmake.in >> ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake @ONLY) >> >> - install the export set: >> >> install(EXPORT ${CMAKE_PROJECT_NAME}LibraryDepends DESTINATION >> share/${CMAKE_PROJECT_NAME}/CMake) >> >> >> - create a *Config.cmake file for the use from the install tree and >> install it: >> >> set(QYOTO_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include) >> set(QYOTO_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib) >> set(QYOTO_CMAKE_DIR >> ${CMAKE_INSTALL_PREFIX}/share/${CMAKE_PROJECT_NAME}/CMake) >> configure_file(${CMAKE_PROJECT_NAME}Config.cmake.in >> ${CMAKE_BINARY_DIR}/InstallFiles/${CMAKE_PROJECT_NAME}Config.cmake >> @ONLY) >> install(FILES >> ${CMAKE_BINARY_DIR}/InstallFiles/${CMAKE_PROJECT_NAME}Config.cmake >> DESTINATION share/${CMAKE_PROJECT_NAME}/CMake) >> >> - The *Config.cmake.in could look like this: >> >> ####################################################################### >> # Tell the user project where to find our headers and libraries >> set(QYOTO_INCLUDE_DIR "@QYOTO_INCLUDE_DIR@") >> set(QYOTO_INCLUDE_DIRS "${QYOTO_INCLUDE_DIR}") >> set(QYOTO_LIBRARY_DIRS "@QYOTO_LIB_DIR@") >> >> # Our library dependencies (contains definitions for IMPORTED targets) >> include("@QYOTO_CMAKE_DIR@/@PROJECT_NAME@LibraryDepends.cmake") >> >> # Defines (if required) >> set(QYOTO_DEFINITIONS "@QYOTO_COMPILE_DEFINITIONS@") >> >> # USE file (if you have one) >> set(QYOTO_USE_FILE >> "@QYOTO_CMAKE_DIR@/@PROJECT_NAME@Use.cmake" >> ) >> ####################################################################### >> >> As you can see, the QYOTO_INCLUDE_DIR, QYOTO_LIB_DIR and QYOTO_CMAKE_DIR >> values will differ between build and install tree, which is why you >> should configure it twice, once for installation and once for the use >> from the build tree. >> >> - If you want to get fancy, you can also provide a *ConfigVersion.cmake >> file. This file should set the following variables, depending on the >> variables PACKAGE_FIND_NAME, PACKAGE_FIND_VERSION, >> PACKAGE_FIND_VERSION_{MAJOR,MINOR,PATCH,TWEAK,COUNT}: >> >> - PACKAGE_VERSION (version string) >> - PACKAGE_VERSION_EXACT (TRUE or FALSE) >> - PACKAGE_VERSION_COMPATIBLE (TRUE or FALSE) >> - PACKAGE_VERSION_UNSUITABLE (TRUE or FALSE) > > Wow, good summary. > > Can you please put that in a wiki page on http://www.cmake.org/Wiki/CMake ? > > Thanks :-) > Alex
http://www.cmake.org/Wiki/CMake:How_to_create_a_ProjectConfig.cmake_file What do you think? Text is pretty terse, but the code should cover it... Michael _______________________________________________ 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