Arjen Markus writes:

> Jim Dishaw wrote:
>
>>Third, CMake does not provide an option for omitting the default
>>library information when building with MSVC.  This is an issue if you
>>want to build a runtime independent library.  A runtime independent
>>library is handy because you do not have to build a debug version, a
>>non-debug version, a static version, a multithreaded version, etc.  The
>>other option is to have the person using Plplot specify
>>/nodefaultlib:<library> as a linker option.  I find that option less
>>desireable than building a runtime independent version of Plplot.
>>
> Hm, that does sound interesting. Is this a problem with MSVC only? How
> does this change with the later versions of MSVC (7, 8, ...)? (I
> usually try to avoid getting involved in these issues, but I do not
> always succeed.)
>

>From what I can tell, almost all versions of MSVC put default library
information into the .obj file.  The only exceptions maybe some of the
really old ones.  The available default libraries are:

libcmt    Multithreaded, static link
msvcrt    Multithreaded, dynamic link (e.g. MSVCR80.DLL)
libcmtd   Multithreaded, static link, debug
msvcrtd   Multithreaded, dynamic link, debug
msvcmrt   C Runtime import library for CLR
msvcurt   C Runtime import library for pure MSIL code

Older version of MSVC had

libc      Singlethreaded, static link
libcd     Singlethreaded, static link, debug

The changes that I have so far (they may not be pretty because my grasp
of CMake is weak):

In UserOverride.cmake

message(STATUS "NOTICE: Checking for MSVC on WIN32")
if(WIN32)
  if(MSVC)
    message(STATUS "NOTICE: MSVC, setting /Zl for library builds")
    # Copied from the CMake defaults as of 2.6.0
    # W3 = Warning Level 3
    # Zm1000 = Max Memory Allocation (% of default)
    # Zl = Omit default library information
    SET (LIB_C_FLAGS "/DWIN32 /D_WINDOWS /W3 /Zm1000 /Zl")
    if(CMAKE_BUILD_TYPE MATCHES "Debug")
      # Zi = Enable debugging information
      # Ob0 = Disable inline expansion
      # Od = Disable optimization
      # RTC1 = Enable fast checks
      SET (LIB_C_FLAGS_DEBUG "/D_DEBUG /Zi /Ob0 /Od /RTC1")
    endif(CMAKE_BUILD_TYPE MATCHES "Debug")
  endif(MSVC)
  
  if(TARGET_FORTRAN MATCHES "IVF") 
    SET(TARGET_LIB_FC_FLAGS "${CMAKE_FC_FLAGS} /libdir:none")
  endif(TARGET_FORTRAN MATCHES "IVF")
endif(WIN32)

Next, in the CMakeLists.txt files that are in src, bindings, drivers,
and lib need to have the following added

if(WIN32 AND MSVC)
  SET(CMAKE_C_FLAGS "${LIB_C_FLAGS}")
  SET(CMAKE_C_FLAGS_DEBUG "${LIB_C_FLAGS_DEBUG}")
endif(WIN32 AND MSVC)

These changes basically create a different set of C flags (I left C++
alone because I was not sure if this is the best way to implement this,
however it could be added with CXX_FLAGS) for files that are destined to
go into the library.

Additional work is needed to get this working for DLL builds--I did not
put the effort in because there may be a better way.

Cheers,

-jd

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to