Le mardi 15 janvier 2013 à 11:56 -0500, Michael Jackson a écrit :
> 
> On Jan 15, 2013, at 11:44 AM, Bogdan Cristea wrote:
> 
> > Le mardi 15 janvier 2013 à 11:31 -0500, Michael Jackson a écrit :
> >> There are lots of different ways to do this. The following is an
> >> example of what *I* do.
> >> ----- In my CMakeLists.txt file I have this
> >> set(DREAM3DLib_BUILT_AS_DYNAMIC_LIB)
> >> IF (BUILD_SHARED_LIBS)
> >>    set(DREAM3DLib_BUILT_AS_DYNAMIC_LIB 1)
> >>    IF (WIN32)
> >>        ADD_DEFINITIONS("-DDREAM3DLib_BUILT_AS_DYNAMIC_LIB")
> >>    ENDIF (WIN32)
> >> ENDIF (BUILD_SHARED_LIBS)
> >> 
> >> ----- In a Header file Define this
> >> 
> >> /* Cmake will define DREAM3DLib_EXPORTS on Windows when it
> >> configures to build a shared library. If you are going to use
> >> another build system on windows or create the visual studio
> >> projects by hand you need to define DREAM3DLib_EXPORTS when
> >> building the MXADatModel DLL on windows.
> >> */
> >> 
> >> #if defined (DREAM3DLib_BUILT_AS_DYNAMIC_LIB)
> >> 
> >>  #if defined (DREAM3DLib_EXPORTS)  /* Compiling the MXA DLL/Dylib */
> >>    #if defined (_MSC_VER)  /* MSVC Compiler Case */
> >>      #define  DREAM3DLib_EXPORT __declspec(dllexport)
> >>      #define EXPIMP_TEMPLATE
> >>    #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility
> >> options */
> >>      #define DREAM3DLib_EXPORT __attribute__
> >> ((visibility("default")))
> >>    #endif
> >>  #else  /* Importing the DLL into another project */
> >>    #if defined (_MSC_VER)  /* MSVC Compiler Case */
> >>      #define  DREAM3DLib_EXPORT __declspec(dllimport)
> >>      #define EXPIMP_TEMPLATE extern
> >>    #elif (__GNUC__ >= 4)  /* GCC 4.x has support for visibility
> >> options */
> >>      #define DREAM3DLib_EXPORT __attribute__
> >> ((visibility("default")))
> >>    #endif
> >>  #endif
> >> #endif
> >> 
> >> /* If DREAM3DLib_EXPORT was never defined, define it here */
> >> #ifndef DREAM3DLib_EXPORT
> >>  #define DREAM3DLib_EXPORT
> >>  #define EXPIMP_TEMPLATE
> >> #endif
> >> 
> >> Hope that helps. There is also a wiki entry on this topic on the CMake
> >> Wikie. "Building a DLL for Linux Devs" which might help also. 
> > 
> > Hi
> > 
> > Thank you for your quick answer. This approach still leaves me with one
> > problem: each time I need to use the dynamic version of the library for
> > building another program I need to remember to define
> > DREAM3DLib_BUILT_AS_DYNAMIC_LIB in my CMakeLists.txt file, which is
> > exactly what I would like to avoid.
> > 
> > regards
> > Bogdan
> > 
> 
> Right, so I also have issues like this when I bring in some other libraries, 
> for example HDF5. In my own implementation of FindHDF5.cmake I specifically 
> look for a variable "HDF5_BUILT_AS_DYNAMIC_LIB" and then create a header file 
> that has this:
> 
> #define HDF5_BUILT_AS_DYNAMIC_LIB 0
> OR 
> #define HDF5_BUILT_AS_DYNAMIC_LIB 1
> 
> depending on what came back from the test. You could do the same thing for 
> your library. Create a header file with the proper defines that gets shipped 
> with your library. Users can test for that symbol if they are NOT using 
> CMake. If they *are* using CMake then you can also ship some CMake files that 
> already have the proper CMake variables defined in the proper way for your 
> library was built. This allows the user of your library to "do the right" 
> thing by simply #include <your_header.h> which will have the proper define.
> 
> Hope that helps:

Yes, this seems to be the solution.


--

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

Reply via email to