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