Линкует .lib вместо .dll
CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(HelloWorld)
add_executable(HelloWorld main.cpp)
add_library(MessageLib
SHARED
lib/hello.hpp
lib/hello.cpp
)
target_link_libraries(HelloWorld MessageLib)
При сборке проекта (cmake --build), линкер почему-то пытается подключить статическую библиотеку (.lib), но при этом cmake генерирует динамическую (.dll). То есть, если вместо SHARED указать STATIC, то проект будет успешно собран.
Ошибка при сборке с параметром SHARED:
LINK : fatal error LNK1104: не удается открыть файл "Debug\MessageLib.lib"
UPD: На Linux все сработало, без проблем. На Windows проблема актуальна. Возможно необходимо просто указать флаг компилятору? На Win используется clang-cl, на Linux: gcc.
UPD2: Сборка проекта https://github.com/punkochel/hello-project
Log сборки проекта CMake:
PS D:\Users\username\Desktop\hello-project\build> cmake ..
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.33.31631.0
-- The CXX compiler identification is MSVC 19.33.31631.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/bin/HostX64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/bin/HostX64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Users/username/Desktop/hello-project/build
PS D:\Users\username\Desktop\hello-project\build>
Log компоновки проекта:
PS D:\Users\username\Desktop\hello-project\build> cmake --build .
MSBuild version 17.4.1+9a89d02ff for .NET Framework
Checking Build System
Building Custom Rule D:/Users/username/Desktop/hello-project/CMakeLists.txt
hello.cpp
MessageLib.vcxproj -> D:\Users\username\Desktop\hello-project\build\Debug\MessageLib.dll
Building Custom Rule D:/Users/username/Desktop/hello-project/CMakeLists.txt
main.cpp
LINK : fatal error LNK1104: не удается открыть файл "Debug\MessageLib.lib" [D:\Users\username\Desktop\hello-project\buil
d\HelloWorld.vcxproj]
PS D:\Users\username\Desktop\hello-project\build>
Решение проблемы отражено в комментариях к данному вопросу.
Источник: Stack Overflow на русском