CMAKE_SHARED_LIBRARY_PREFIX is blank on MSVC, unlike on most platforms (MinGW included):
$ (cd cmake-2.8.0/Modules/Platform/ && grep -re CMAKE_SHARED_LIBRARY_PREFIX .) ./AIX.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib ./BlueGeneL.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib ./Catamount.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib ./CYGWIN-g77.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") ./CYGWIN.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "cyg") ./Darwin-icc.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") ./Darwin.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") ./eCos.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib ./Generic-SDCC-C.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "") # lib ./Windows-g77.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib ./Windows-gcc.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib ./Windows.cmake:SET(CMAKE_SHARED_LIBRARY_PREFIX "") # lib The conflict I'm running into is as follows. I have a scripting language (Lua) that loads a pluggable module "foo", which in turns loads and provides a scripting interface for a system library "foo". On most platforms, the system library is named "libfoo.so" and located in the system library search path, and the module is named "foo.so" and located in the scripting language's search path "modules" (which may or may not, typically not, be in the system library search path). Now, on Windows at least, the scripting language dynamically loads "modules/foo.dll", which in turns attempts to statically load the system library "foo.dll" (without a path name), but Windows sees that a "foo.dll" is already loaded and therefore returns "modules/foo.dll" instead, causing breakage. Now, there may be ways around this [2], but the simplest solution is to just rename the system library to "libfoo.dll". CMake does that for MinGW, but why not MSVC? I'd prefer not to add a prefix on the pluggable modules, which would be atypical. As a workaround, I may add this to a common file included in all my projects: if(MSVC) set(CMAKE_SHARED_LIBRARY_PREFIX "lib") endif(MSVC) [1] http://msdn.microsoft.com/en-us/library/ms684179%28VS.85%29.aspx - "If lpFileName does not include a path and there is more than one loaded module with the same base name and extension, the function returns a handle to the module that was loaded first." [2] http://stackoverflow.com/questions/107888/is-there-a-windows-msvc-equivalent-to-the-rpath-linker-flag _______________________________________________ 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