# Install dlls on windows

**URL:** https://discourse.cmake.org/t/install-dlls-on-windows/6904
**Category:** Usage
**Tags:** os:windows
**Created:** [November 19, 2022, 3:27am UTC](https://discourse.cmake.org/t/install-dlls-on-windows/6904 "2022-11-19T03:27:21Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![bramtayl](https://discourse.cmake.org/user_avatar/discourse.cmake.org/bramtayl/32/2931_2.png) [@bramtayl](https://discourse.cmake.org/u/bramtayl)
#### Post date: [November 19, 2022, 3:27am UTC](https://discourse.cmake.org/t/install-dlls-on-windows/6904/1 "2022-11-19T03:27:21Z")

</div>

Hello, new to C++ and cmake, so apologies if I’m missing something obvious…

I’m trying to build a small project that depends on two packages I downloaded from vcpkg, “gamma” and “qtbase”. I’m building from within VSCode with the cmake and c++ packages. I’m using vcpkg in manifest mode. I’m on windows and using the MSVC compiler. After I got done installing the projectt, I realized I also needed to put the dlls the executable depended on into the same folder as the executable. So I have this line where I copy the entire contents of the vcpkg bin folder: `install(DIRECTORY "${VCPKG_PREFIX}/bin" DESTINATION ".")`. The executable really only needs about 1/4 of these dlls though. I’m wondering if there is a more elegant way to do this. I’ve included the following below: my CMakeLists.txt, my vcpkg manifest file, and the ad-hoc pkg-config file I wrote for gamma, which doesn’t come with a cmake config file.

Yes, I realize my first mistake was to try to do this on windows…

CMakeLists.txt:

```auto
cmake_minimum_required(VERSION 3.5)
cmake_policy(SET CMP0087 NEW)

project(Justly VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(VCPKG_PREFIX "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}")
set(CMAKE_INSTALL_PREFIX "${Justly_SOURCE_DIR}/install")
file(COPY_FILE "${Justly_SOURCE_DIR}/gamma.pc" "${VCPKG_PREFIX}/lib/pkgconfig/gamma.pc")

# without vulkan I get a warning that it wasn't found
# I don't think it actually gets used though
set(CMAKE_PREFIX_PATH "${VCPKG_PREFIX}" "C:/VulkanSDK/1.3.231.1")
set(VCPKG_BIN "${VCPKG_PREFIX}/bin")

add_executable(Justly
    [all the .cpp files]
)

find_package(PkgConfig REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS Widgets)

pkg_check_modules(Justly REQUIRED gamma)

target_include_directories(Justly PUBLIC ${Justly_INCLUDE_DIRS})
target_compile_options(Justly PUBLIC ${Justly_CFLAGS})
target_link_libraries(Justly PUBLIC Qt6::Widgets ${Justly_LINK_LIBRARIES})

install(TARGETS Justly)
# this copies more than strictly necessary but I don't know how to do it better
install(DIRECTORY "${VCPKG_PREFIX}/bin" DESTINATION ".")

qt_generate_deploy_app_script(
    TARGET Justly
    FILENAME_VARIABLE deploy_script
)
install(SCRIPT ${deploy_script})

```

vcpkg.json:

```auto
{
  "name": "justly",
  "version-string": "0.1.0",
  "dependencies": [
    "gamma",
    "pkgconf",
    "qtbase"
  ]
}

```

gamma.pc:

```auto
prefix=C:/Users/brand/OneDrive/Desktop/Justly/build/vcpkg_installed/x64-windows
exec_prefix=${prefix}/bin
libdir=${prefix}/lib
includedir=${prefix}/include

Name: Gamma
Description: Generic Synthesis C++ Library
Version: gamma-2018-01-27
Requires: portaudio-2.0 sndfile
Libs: -L"${libdir}" -lgamma
Cflags: -I"${includedir}"

```

---

<div class="post-metadata">

### Author: ![ben.boeckel](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.cmake.org/u/ben.boeckel)
#### Post date: [December 1, 2022, 6:22pm UTC](https://discourse.cmake.org/t/install-dlls-on-windows/6904/2 "2022-12-01T18:22:18Z")

</div>

@ANaumann85?

---

<div class="post-metadata">

### Author: ![bramtayl](https://discourse.cmake.org/user_avatar/discourse.cmake.org/bramtayl/32/2931_2.png) [@bramtayl](https://discourse.cmake.org/u/bramtayl)
#### Post date: [December 1, 2022, 10:59pm UTC](https://discourse.cmake.org/t/install-dlls-on-windows/6904/3 "2022-12-01T22:59:36Z")

</div>

I got this sorted eventually. Pkgconfig wasn’t propagating runtime libraries like it should, so I had to write my own FindGamma.cmake. Then, I could install like this, which I found on a stackoverflow answer. The filtering seems a bit messy but

```auto
install(TARGETS Justly
    RUNTIME_DEPENDENCIES
    # exclude whatever these are?
    PRE_EXCLUDE_REGEXES "api-ms-" "ext-ms-"
    # exclude 32 bit versions of dependencies maybe?
    POST_EXCLUDE_REGEXES ".*system32/.*\\.dll"
)

```

I also had to delete some cd calls in the debug plugin config script from Qt to get the debug build working.
