Install dlls on windows

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:

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:

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

gamma.pc:

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}"

@ANaumann85?

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

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.