On Jul 11, 2008, at 11:34 AM, Mehdi Rabah wrote:



On Thu, Jul 10, 2008 at 12:43 PM, Yuri Timenkov <[EMAIL PROTECTED]> wrote:


On Monday 07 July 2008 19:59:24 Mehdi Rabah wrote:
> Hi,
>
> I need to set multiple symbols in one of my target of my project. I can't > use add_definitions because I don't want to define those variable for all
> my targets, so I tried custom properties.
>
> set_target_properties( target PROPERTIES DEFINE_SYMBOL VALUE1 VALUE2 )
> doesn't work : the function doesn't expect this number of variables.
>
> if I try :
>
> set( var "VALUE1 VALUE2" ).
> set_target_properties( target PROPERTIES DEFINE_SYMBOL  ${var} )
>
> I get
>
> c1xx : fatal error C1083: 'VALUE2': No such file or directory
>
> I'm working with the microsoft compiler, and cmake 2.6.
I just discovered nice feature: COMPILE_DEFINITIONS property.
That is you can add custom defines to source files, targets or directories (with
commands set_source_files_properties, set_target_properties and
set_directory_properties commands accordingly).

Moreover, COMPILE_DEFINITIONS can be configuration-specific, like
COMPILE_DEFINITIONS_DEBUG.

Thanks,

I also discovered (in the doc) that cmake automatically define the targetName_EXPORTS when compiling. I didn't tried it yet but it's exactly what I need.


Yes, when you are on Windows (MSVC and MINGW at least) AND building a SHARED library, then cmake will add the targetName_EXPORTS when compiling. It is up to you to add the proper code into a header file to make user of that information. An example of this would be:

//////////////////////////////////////////////////////////////////////// ///////
//
//  Copyright (c) 2007, mjackson
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
//  This code was written under United States Air Force Contract number
//                           FA8650-04-C-5229
//
//////////////////////////////////////////////////////////////////////// ///////
#ifndef _MXA_DLL_EXPORT_H_
#define _MXA_DLL_EXPORT_H_

/* Cmake will define MXADataModel_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 MXADataModel_EXPORTS when
building a DLL on windows.
*/

#if defined (WIN32) && defined (BUILD_SHARED_LIBS)
#if defined (_MSC_VER)
#pragma warning(disable: 4251)
#endif
  #if defined(MXADataModel_EXPORTS)
    #define  MXA_EXPORT __declspec(dllexport)
  #else
    #define  MXA_EXPORT __declspec(dllimport)
  #endif /* MXADataModel_EXPORTS */
#else /* defined (_WIN32) && defined (MXA_BUILD_SHARED_LIBS)  */
 #define MXA_EXPORT
#endif
#endif /* _MXA_DLL_EXPORT_H_ */

I also use the following in my CMakeLists.txt code:

# Build shared libraries
OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
SET (LIB_TYPE STATIC)
SET (MXA_BUILT_AS_DYNAMIC_LIB)
IF (BUILD_SHARED_LIBS)
  SET (LIB_TYPE SHARED)
  SET (MXA_BUILT_AS_DYNAMIC_LIB 1)
  IF (WIN32)
    ADD_DEFINITIONS("-DBUILD_SHARED_LIBS")
  ENDIF (WIN32)
ENDIF (BUILD_SHARED_LIBS)


_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to