[CMake] ${PROJECT}-config.cmake

Biddiscombe, John A. biddisco at cscs.ch
Mon Jun 7 14:54:32 EDT 2010


Seems that just doing

IF (NOT ${PROJECTXXX_SOURCE_DIR})
 include config file
ENDIF

is enough and works ok. If the project is part of the same build, the source dir is defined, otherwise not.

JB

> -----Original Message-----
> From: cmake-bounces at cmake.org [mailto:cmake-bounces at cmake.org] On Behalf Of
> Biddiscombe, John A.
> Sent: 07 June 2010 17:25
> To: cmake at cmake.org
> Subject: [CMake] ${PROJECT}-config.cmake
> 
> When using the install target command as follows
> 
> 
> 
>   INSTALL (
> 
>       TARGETS
> 
>           ${HDF5_LIB_TARGET}
> 
>       EXPORT
> 
>           ${HDF5_EXPORTED_TARGETS}
> 
>       LIBRARY DESTINATION lib COMPONENT libraries
> 
>       ARCHIVE DESTINATION lib COMPONENT libraries
> 
>       RUNTIME DESTINATION bin COMPONENT libraries
> 
>   )
> 
> 
> 
> cmake very nicely generates an HDF5-config.cmake file in the build
> directory, and at install time, in the install directory. This is great.
> 
> 
> 
> However, I have project A(paraview) with two subdirectories B (hdf5) and C
> (mystuff), where C "uses" B. All is well except that if C includes the hdf5-
> config.cmake from the Build directory as generated by B (ADD_LIBRARY(vtkhdf5
> SHARED IMPORTED)) , cmake produces error messages along the lines of
> 
> 
> 
> CMake Error at D:/cmakebuild/pv-shared/Utilities/hdf5-1.8/HDF5-
> config.cmake:16 (ADD_LIBRARY):
> 
> add_library cannot create imported target "vtkhdf5" because another target
> 
> with the same name already exists.
> 
> 
> 
> Naturally, when building C standalone using the install directory of
> standalone B, all works fine.
> 
> 
> 
> Everything would be simple, if cmake would simply skip the imported target
> from B the second time it is loaded when called from the subproject C, then
> a single set of config and cmakelists would work all the time, but as it is,
> extra logic needs to be added.
> 
> 
> 
> Is there any easy way of telling project C, load the config file if B is not
> part of the same build so that I can reuse the same syntax between separate
> build or common builds. I'd like to use the generated hdf5-config.cmake
> files because they have all the necessary properties set correctly (like
> when target name is not the same as lib name etc etc, which makes things
> harder like below).
> 
> 
> 
> # Import target "vtkhdf5" for configuration "Debug"
> 
> SET_PROPERTY(TARGET vtkhdf5 APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
> 
> SET_TARGET_PROPERTIES(vtkhdf5 PROPERTIES
> 
>   IMPORTED_IMPLIB_DEBUG "D:/cmakebuild/pv-shared/bin/Debug/vtkhdf5ddll.lib"
> 
>   IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "ws2_32;wsock32;C:/Program
> Files/MPICH2/lib/mpi.lib;vtkzlib"
> 
>   IMPORTED_LOCATION_DEBUG "D:/cmakebuild/pv-
> shared/bin/Debug/vtkhdf5ddll.dll"
> 
>   )
> 
> 
> 
> Thanks
> 
> 
> 
> JB
> 
> 
> 
> 
> 
> --
> 
> John Biddiscombe,                            email:biddisco @ cscs.ch
> 
> http://www.cscs.ch/ <http://www.cscs.ch/>
> 
> CSCS, Swiss National Supercomputing Centre  | Tel:  +41 (91) 610.82.07
> 
> Via Cantonale, 6928 Manno, Switzerland      | Fax:  +41 (91) 610.82.82
> 
> 



More information about the CMake mailing list