Hei, thanks for the thorough review and hints. I'll surely apply them

Thanks
Benjamin

Hendrik Sattler wrote:
Zitat von Benjamin Schindler <bschind...@inf.ethz.ch>:
I'm working on a project which builds both on linux and windows. I
generated an eclipse project out of it which works basically fine but
it's not able to recognize i.e. the __GNUC__ macro (and probably any
other macro defined per default on gcc) are not recognized by eclipse.
That means that by using a header like:

#if defined(_MSC_VER) && (_MSC_VER >= 1300)
#ifdef FLOW_DLL_EXPORT
#define FLOW_DLL _declspec(dllexport)
#else
#define FLOW_DLL _declspec(dllimport)
#endif
#else
#ifdef __GNUC__
#define FLOW_DLL
#endif
#endif

I know that it's unrelated to your question but this code is slightly wrong. For the windows version of gcc, it also understands the _declspec() thing. You don't make it compiler-specific but system-specific. Additionally, on non-windows systems, you can use the visibility attribute to achieve something similar.
That's why the gcc people suggest the following at
http://gcc.gnu.org/wiki/Visibility (I simplified it):
#if defined _WIN32 || defined __CYGWIN__
  #ifdef FLOW_DLL_EXPORT
    #define FLOW_DLL __declspec(dllexport)
  #else
    #define FLOW_DLL __declspec(dllimport)
  #endif
#elif __GNUC__ >= 4
  #define FLOW_DLL __attribute__ ((visibility("default")))
  #define DLL_LOCAL  __attribute__ ((visibility("hidden")))
#endif
#ifndef FLOW_DLL
#define FLOW_DLL
#endif
#ifndef DLL_LOCAL
#define DLL_LOCAL
#endif

You only need to add -fvisibility=hidden to gcc command line on non-windows systems. The above still has the flaw you use _declspec(dllimport) when compiling the library as static library. That's ok if you don't intend to do so else easy to fix.

Additionally, eclipse may not select the right choice but the macros will not error out as they are _always_ defined in some way.

Have fun

HS


_______________________________________________
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

_______________________________________________
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