[CMake] Questions on CMAKE_CONFIGURATION_TYPES

Michael Schildt michael.schildt at ifn-magdeburg.de
Fri Mar 26 05:22:43 EDT 2010


> 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
>   
> Ryan
>
> On Thursday, March 25, 2010, Michael Schildt
> <michael.schildt at ifn-magdeburg.de <http://www.cmake.org/mailman/listinfo/cmake>> wrote:
> >/
> />/
> />/ On Thu, Mar 25, 2010 at 12:51 PM, Michael Schildt
> />/ <michael.schildt at ifn-magdeburg.de <http://www.cmake.org/mailman/listinfo/cmake>> wrote:
> />>>//
> />/ />>/ On Wed, Mar 24, 2010 at 2:10 PM, John Drescher <drescherjm at gmail.com
> />/ />>/ <http://www.cmake.org/mailman/listinfo/cmake>> wrote:
> />/ />>/ >/ On Wed, Mar 24, 2010 at 1:42 PM, Michael Schildt
> />/ />>/ />/ <michael.schildt at ifn-magdeburg.de
> />/ />>/ <http://www.cmake.org/mailman/listinfo/cmake>> wrote:
> />/ />>/ />>/ Hello,
> />/ />>/ />>/
> />/ />>/ />>/ I use GDCM libaries in one project. Unfurtunally, i couldn't find a
> />/ />>/ findGDCM
> />/ />>/ />>/ module and i'm not experienced enough to write one. I have seen that
> />/ />>/ GDCM is
> />/ />>/ />>/ used in ITK, so there must be a module like this. GDCM is using cmake
> />/ />>/ too,
> />/ />>/ />>/ so inclusion should be easy. But i have problems to link the correkt
> />/ />>/ library
> />/ />>/ />>/ version depending on the configuration type.
> />/ />>/ />>/
> />/ />>/ />>/ IF(WIN32)
> />/ />>/ />>/  INCLUDE_DIRECTORIES(C:/Programme/GDCM\ 2.0/include/gdcm-2.0)
> />/ />>/ />>/  IF(CMAKE_BUILD_TYPE MATCHES "Debug")
> />/ />>/ />>/   LINK_DIRECTORIES("C:/Program Files/GDCM/bin/Debug")
> />/ />>/ />>/  ELSE(CMAKE_BUILD_TYPE MATCHES "Debug")
> />/ />>/ />>/   LINK_DIRECTORIES("C:/Program Files/GDCM/bin/Release")
> />/ />>/ />>/  ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug")
> />/ />>/ />>/  SET(GDCM_LIBRARIES gdcmcharls.lib gdcmCommon.lib gdcmDICT.lib
> />/ />>/ gdcmDSED.lib
> />/ />>/ />>/ gdcmexpat.lib gdcmgetopt.lib gdcmIOD.lib gdcmjpeg8.lib gdcmjpeg12.lib
> />/ />>/ />>/ gdcmjpeg16.lib gdcmMSFF.lib gdcmopenjpeg.lib gdcmzlib.lib)
> />/ />>/ />>/ ELSE(WIN32)
> />/ />>/ />>/   # Linux
> />/ />>/ />>/   INCLUDE_DIRECTORIES(/usr/include/gdcm-2.0)
> />/ />>/ />>/   SET(GDCM_LIBRARIES gdcmCommon gdcmDICT gdcmDSED gdcmIOD gdcmjpeg8
> />/ />>/ />>/ gdcmjpeg12 gdcmjpeg16 gdcmMSFF)
> />/ />>/ />>/ ENDIF(WIN32)
> />/ />>/ />>/
> />/ />>/ />>/ He always includes the Relase Directory. What is a solution for this
> />/ />>/ issue?
> />/ />>/ />>/
> />/ />>/ />/
> />/ />>/ />/ Build GDCM from source and it will have the necessary finders. Do not
> />/ />>/ />/ INSTALL. Then the usual in your CMakeLists.txt file. Here is an
> />/ />>/ />/ example.
> />/ />>/ />/
> />/ />>/ />/ CMakeLists.txt
> />/ />>/ />/ cmake_minimum_required(VERSION 2.6)
> />/ />>/ />/
> />/ />>/ />/        PROJECT(GDCMImageViewer)
> />/ />>/ />/
> />/ />>/ />/        FIND_PACKAGE(VTK REQUIRED)
> />/ />>/ />/        INCLUDE(${VTK_USE_FILE})
> />/ />>/ />/
> />/ />>/ />/        FIND_PACKAGE(GDCM REQUIRED)
> />/ />>/ />/        INCLUDE(${GDCM_USE_FILE})
> />/ />>/ />/
> />/ />>/ />/        INCLUDE_DIRECTORIES(
> />/ />>/ />/         ${GDCM_SOURCE_DIR}/Utilities/VTK
> />/ />>/ />/        )
> />/ />>/ />/
> />/ />>/ />/        IF(WIN32 AND NOT CYGWIN)
> />/ />>/ />/                ADD_SUBDIRECTORY(getopt)
> />/ />>/ />/                INCLUDE_DIRECTORIES(getopt)
> />/ />>/ />/        ENDIF(WIN32 AND NOT CYGWIN)
> />/ />>/ />/
> />/ />>/ />/        ADD_EXECUTABLE(GDCMImageViewer gdcmviewer.cxx)
> />/ />>/ />/        TARGET_LINK_LIBRARIES(GDCMImageViewer vtkHybrid vtkInfovis
> />/ />>/ vtkWidgets
> />/ />>/ />/ vtkgdcm getopt)
> />/ />>/ />/
> />/ />>/ />/
> />/ />>/ /
> />/ />>/ BTW when cmake-gui complains it can not find GDCM point it to the
> />/ />>/ place where you built gdcm. Also make sure you build all
> />/ />>/ configurations of GDCM that you want in the same build tree. That is
> />/ />>/ why I said do not install. Since install will try to put the binaries
> />/ />>/ in the same folder and since they are named the same it will cause
> />/ />>/ problems.
> />/ />>/
> />/ />>/
> />/ />>/ John
> />/ />>/
> />/ />/
> />/ />/ Hi,
> />/ />/
> />/ />/ thanks for the useful hints, cmake finds the package now. But unfurtunally,
> />/ />/ it does not link the library and therefore i get a lot of unresolved
> />/ />/ dependency from gdcm. i replaced my stuff with
> />/ />/
> />/ />/ FIND_PACKAGE(GDCM REQUIRED)
> />/ />/ INCLUDE(${GDCM_USE_FILE})
> />/ />/
> />/ />/ and tested the typical variables
> />/ />/
> />/ />/ MESSAGE(STATUS "Cmake GDCM: using GDCM includes at: ${GDCM_INCLUDE_DIR}")
> />/ />/ MESSAGE(STATUS "Cmake GDCM: using GDCM libraries: ${GDCM_LIBRARIES}")
> />/ />/ MESSAGE(STATUS "Cmake GDCM: using GDCM libraries: ${GDCM_LIBRARY}")
> />/ />/
> />/ />/ but the are all empty? How can i find out, what is defined by GDCM?
> />/ /
> />/ `cmake --help-module` parses system installed Find*.cmake file,
> />/ however it does not parse *Config.cmake file. You have to look into
> />/ GDCMConfig.cmake and such to understand.
> />/
> />/ Anyway, there is no generic "GDCM_LIBRARIES", you have to specify
> />/ explicitely the name of the desired lib:
> />/
> />/ add_executable(dummy dummy.cxx)
> />/ target_link_libraries(dummy gdcmMSFF)
> />/
> />/ Cheers
> />/ --
> />/ Mathieu
> />/
> />/
> />/
> />/ Hello,
> />/
> />/ i found GDCMconfig.cmake as you mentioned and the definitions there in are GDCM_INCLUDE_DIRS and GDCM_LIBRARY_DIRS. But as in the former post i specified the needed libraries manually. Thank you all for your help.
> />/
> />/ FIND_PACKAGE(GDCM REQUIRED)
> />/ INCLUDE(${GDCM_USE_FILE})
> />/
> />/ SET(GDCM_LIBRARIES gdcmCommon gdcmDICT gdcmDSED gdcmIOD
> />/    gdcmjpeg8 gdcmjpeg12 gdcmjpeg16 gdcmMSFF
> />/    CACHE STRING "GDCM libraries")
> />/
> />/ MESSAGE(STATUS "Cmake GDCM: using includes at: ${GDCM_INCLUDE_DIRS}")
> />/ MESSAGE(STATUS "Cmake GDCM: using libraries at: ${GDCM_LIBRARY_DIRS}")
> />/ MESSAGE(STATUS "Cmake GDCM: using libraries: ${GDCM_LIBRARYRIES}")
> />/
> />/ TARGET_LINK_LIBRARIES(fileInfo ${GDCM_LIBRARIES})
> />/
> />/ But it is still unclear to me how to provide different link_directories for Debug and Release used by MSVC 9.0 on Windows for external libraries not using cmake . If i have release and debug libraries with different namens (i.e. test1.lib and test1d.lib) i can use something like
> />/
> />/ TARGET_LINK_LIBRARIES( Project1 debug test1d.lib optimized test1.lib)
> />/
> />/ But what if i have i.e. Debug/test1.lib and Release/test1.lib? How do i define configuration-type depended LINK_DIRECTORIES?
> />/
> />/ Best reguards,
> />/    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
> />/
> /
> -- 
> Ryan Pavlik
> HCI Graduate Student
> Virtual Reality Applications Center
> Iowa State University
>
> rpavlik at iastate.edu <http://www.cmake.org/mailman/listinfo/cmake>
> http://academic.cleardefinition.com
> Internal VRAC/HCI Site: http://tinyurl.com/rpavlik
>   


More information about the CMake mailing list