Well, basically, Cmake will _help_ you create your library BUT there is some work that you need to add to your project.

Say your library is named "mylib" and Your project name is MyLib.

When you do
Add_library(MyLib SHARED ${Sources}) cmake will automatically add a definition "MyLib_EXPORT" to the compiler invocation on windows. In my example you will also need to define SET (BUILD_SHARED_LIBS TRUE) in your cmakelists.txt file.

Now to use that bit of information you need to have something like the following in a header file that gets included by all your classes:

#if defined (WIN32) && defined (BUILD_SHARED_LIBS)
#if defined (_MSC_VER)
#pragma warning(disable: 4251)
#endif
  #if defined(MyLib_EXPORT)
    #define  MYLIB_EXPORT __declspec(dllexport)
  #else
    #define  MYLIB_EXPORT __declspec(dllimport)
  #endif
#else
 #define MYLIB_EXPORT
#endif


Now, in the class declaration for each of your classes add the definition:

class MYLIB_EXPORT MyClass
{

};

So what happens when all of this is implemented is that on non windows platforms the MYLIB_EXPORT is defined to NOTHING and has not affect. On Windows MYLIB_EXPORT will get defined to __declspec (dllexport) when you actually compile the library or __declspec (dllimport) when the library is being linked to by another library or executable.

I hope all this helps.

Take a look at <http://titanium.imts.us/viewvc/Task_7/MXADataModel/> then src/Common/DLLExport.h for a working example.

--
Mike Jackson   Senior Research Engineer
Innovative Management & Technology Services


On Aug 1, 2008, at 6:10 PM, Leopold Palomo Avellaneda wrote:

Hi,

I'm a Linux user and I'm uncomfortable in the windows environment. In Linux, I can create a C++ library with cmake without any problem. The so version and
the .a (static version).

But, my question is about windows. If I have a shared library that works in Linux, may I have to do something more to have a dll in windows? Because, I have read about the __declspec(dllexport) and __declspec (dllimport) and I'm
a bit lost.

Thanks in advance,

Leo


--
--
Linux User 152692
PGP: 0xF944807E
Catalonia
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake


_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to