[CMake] dll not found in test app for library within visual studio solution (Windows)

Benjamin Kurz benjamin.kurz at bioskill.com
Mon Jun 25 11:48:18 EDT 2012


Hi there,

I have a small project setup, it contains one library and one small test 
application, that should use the library. Basically very similar to the 
basic example on the cmake website.

the structure is still pretty easy:
Project (called ProjectBridge)
   |
   |-- Library (called Bridge)
   |
   |-- testApp


I have 3 CMakeLists.txt one in the root directory, one in the Library 
directory, and one in the TestApp. I add them at the end of this mail.
Now I create a Visual Studio solution with cmake and build the project. 
It builds fine. But if I want to run the TestApp it cannot find the dll 
of the Library. Of couse it works if I copy the dll by hand into the 
TestApp/Release folder, but I want it to work out of the box, without 
the "install" project necessary to run first too (where I could easily 
copy the dll to the appropriate place).

Although the project settings of visual studio of the TestApp project, 
"additional libary paths" contains 
"...<build_directory_of_project>/Bridge" and 
"...<build_directory_of_project>/Bridge/$(Configuration)", it does not 
find the Bridge.dll.

The responsible line for this is in TestApp/CMakeLists.txt. At least I 
assume it is.
"link_directories (${ProjectBridge_BINARY_DIR}/Bridge)"

If wanted or necessary, I can also easily make a project package and 
attach it.

Thanks for any help.

Best regards
Benjamin

System: Win7 64-bit, CMake 2.8.8, Visual Studio 2010 Express

######################
CMakeLists.txt (Project)
######################
cmake_minimum_required (VERSION 2.8)
project (ProjectBridge)

add_subdirectory (Bridge)
add_subdirectory (TestApp)

#####################
CMakeLists.txt(testApp)
#####################
include_directories (${ProjectBridge_SOURCE_DIR}/Bridge)
include_directories (${CMAKE_INSTALL_PREFIX}/include)

link_directories (${ProjectBridge_BINARY_DIR}/Bridge)
link_directories (${CMAKE_INSTALL_PREFIX}/bin)

add_executable (testApp main.cpp)

target_link_libraries (testApp Bridge)

#####################
CMakeLists.txt(Bridge)
#####################
cmake_minimum_required (VERSION 2.8)
project (Bridge)

IF(MSVC_VERSION EQUAL 1400 OR MSVC_VERSION GREATER 1400)
   ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE 
-D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS)
   ADD_DEFINITIONS(-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS)
ENDIF(MSVC_VERSION EQUAL 1400 OR MSVC_VERSION GREATER 1400)

SET( Bridge_MAJOR_VERSION 0 )
SET( Bridge_MINOR_VERSION 1 )
SET( Bridge_BUILD_VERSION 1 )

SET( Bridge_FULL_VERSION
${Bridge_MAJOR_VERSION}.${Bridge_MINOR_VERSION}.${Bridge_BUILD_VERSION} )


FILE( GLOB Bridge_HDRS RELATIVE ${Bridge_SOURCE_DIR} *.h )
set(Bridge_HDRS "${Bridge_HDRS}")

FILE( GLOB Bridge_SRCS RELATIVE ${Bridge_SOURCE_DIR} *.cpp )
set(Bridge_SRCS "${Bridge_SRCS}")

include (GenerateExportHeader)

FOREACH( src ${Bridge_SRCS} )
   LIST( APPEND Bridge_SRCS_global ${CMAKE_CURRENT_SOURCE_DIR}/${src} )
ENDFOREACH( src )

FOREACH( incl ${Bridge_HDRS} )
   LIST( APPEND Bridge_HDRS_global ${CMAKE_CURRENT_SOURCE_DIR}/${incl} )
ENDFOREACH( incl )

SET(CMAKE_INSTALL_PREFIX "install" CACHE PATH "Bridge install prefix")

# make sure symbols are exported.
IF (WIN32)
SET( Bridge_COMPILE_FLAGS "-DBRIDGE_EXPORTS" )
ENDIF (WIN32)

INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} )
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )

add_compiler_export_flags()

# Create build files.
ADD_LIBRARY(Bridge SHARED
                 ${Bridge_SRCS_global}
                 ${Bridge_HDRS_global} 
${PROJECT_BINARY_DIR}/Bridge_export.h)

TARGET_LINK_LIBRARIES( Bridge ${requiredLibs} ${optionalLibs} )

GENERATE_EXPORT_HEADER(Bridge
             BASE_NAME Bridge
             EXPORT_MACRO_NAME BRIDGE_EXPORT
             EXPORT_FILE_NAME Bridge_export.h
             STATIC_DEFINE Bridge_BUILT_AS_STATIC
)

install(FILES Bridge.h ${PROJECT_BINARY_DIR}/Bridge_export.h DESTINATION 
${CMAKE_INSTALL_PREFIX}/include  )

INSTALL( TARGETS Bridge
          LIBRARY DESTINATION lib
          RUNTIME DESTINATION bin
          ARCHIVE DESTINATION lib )






More information about the CMake mailing list