[CMake] IMPORTED DLL-only Target on MSVC

Marek Vojtko (Firaxis) Marek.Vojtko at firaxis.com
Mon Apr 2 18:49:22 EDT 2018


Hi,

Is it not possible to wrap an external DLL-only library in an IMPORTED target?

I have an external dependency that is a single DLL (shared library) and a header file, but no LIB (static library) file. When I create an IMPORTED target and depend on it via target_link_libraries() I run into linkage issues, because on MSVC CMake puts the DLL into the linker command (the "Input" text field in the "Linker" settings of the Project Properties).

add_library( MyDependency::MyDependency MODULE IMPORTED )
set_target_properties( MyDependency::MyDependency
    PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${MyDependency_INCLUDE_DIR}"
        IMPORTED_LOCATION "${MyDependency_SHARED_LIB}"
)
[..]
add_executable( MyExecutable ... )
target_link_libraries( MyExecutable PRIVATE MyDependency::MyDependency )

I tried changing the library type in my add_library() call:
- STATIC obviously didn't work, because I don't have a .lib file and the .dll file in IMPORTED_LOCATION was added to MyExecutable's linker line.
- SHARED did not work because CMake expects a .dll in IMPORTED_LOCATION and a .lib in IMPORTED_IMP_LOCATION, so MyExecutable's linker line had a MyDependency::MyDependency-NOTFOUND entry in it.
- MODULE seemed like the right choice when reading the documentation, but MyExecutable's linker line still contains the .dll file specified in IMPORTED_LOCATION.

What am I doing wrong?

Thanks,
Marek



More information about the CMake mailing list