[CMake] Linking Behavior of Static Libraries on Windows

bpwlist at cox.net bpwlist at cox.net
Thu Mar 22 10:21:59 EST 2007


I think this will work for what a need to do now, but it seems to be awful lot of work for something that should be pretty straight forward to do.  Would it be worthwhile to rethink how CMake links static libraries under windows?

Bryan Walsh

---- Ben Ratzlaff <cmake at daishiva.com> wrote: 
> Here is how I got around what you describe. My project sounds pretty similar
> in how it is set up
> 
> when building the exe:
> IF (PLATFORM MATCHES "win32")
>     IF (CMAKE_GENERATOR MATCHES "Visual Studio 8 2005")
>         SET_TARGET_PROPERTIES (${project_exe} PROPERTIES
>             LINK_FLAGS "$(TargetDir)/project_shared.lib"
>         )
>     ELSE (CMAKE_GENERATOR MATCHES "Visual Studio 8 2005") #nmake makefiles
>         SET_TARGET_PROPERTIES (${project_exe} PROPERTIES
>             LINK_FLAGS "${LIBRARY_OUTPUT_PATH}/project_shared.lib"
>         )
>     ENDIF (CMAKE_GENERATOR MATCHES "Visual Studio 8 2005")
> ELSE (PLATFORM MATCHES "win32")
>     SET_TARGET_PROPERTIES (${project_exe} PROPERTIES
>         LINK_FLAGS "-L${LIBRARY_OUTPUT_PATH} -lproject_shared"
>     )
> ENDIF (PLATFORM MATCHES "win32")
> 
> building shared library:
> IF (PLATFORM MATCHES "win32")
>     # nothing
> ELSE (PLATFORM MATCHES "win32")
>     SET_TARGET_PROPERTIES (${project_SHARED} PROPERTIES
>         PREFIX "lib"
>     )
> ENDIF (PLATFORM MATCHES "win32")
> 
> building a plugin:
> IF (PLATFORM MATCHES "win32")
>     IF (CMAKE_GENERATOR MATCHES "Visual Studio 8 2005")
>         SET_TARGET_PROPERTIES (${PLUGIN_NAME} PROPERTIES
>             LINK_FLAGS "$(TargetDir)/project_shared.lib"
>         )
>     ELSE (CMAKE_GENERATOR MATCHES "Visual Studio 8 2005") #nmake
>         SET_TARGET_PROPERTIES (${PLUGIN_NAME} PROPERTIES
>             LINK_FLAGS "${LIBRARY_OUTPUT_PATH}/project_shared.lib"
>         )
>     ENDIF (CMAKE_GENERATOR MATCHES "Visual Studio 8 2005")
> ELSE (PLATFORM MATCHES "win32")
>     SET_TARGET_PROPERTIES (${PLUGIN_NAME} PROPERTIES
>         LINK_FLAGS "-L${LIBRARY_OUTPUT_PATH} -lproject_shared"
>     )
> ENDIF (PLATFORM MATCHES "win32")
> 
> exe depends on shared library
> plugins depend on shared library
> 
> the plugins in my case, are the ones that depend on the third party
> libraries



More information about the CMake mailing list