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
_______________________________________________
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