CMake 生成的 VS 项目需要 lib 而不是 dll

Wur*_*rmD 5 dll cmake visual-studio

这是我的最小示例:https://www.dropbox.com/s/7fwsr3sigb60rtw/leveling-test.zip ?dl=0

\n\n

我当前的项目文件夹结构和相关的CMakeLists内容:

\n\n
leveling\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt: add_subdirectory(deps) \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 deps\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt: add_subdirectory(xml-reading)\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 xml-reading\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt: add_subdirectory(deps)\n        \xe2\x94\x82                   add_library(xml-reading ...)\n        \xe2\x94\x82                   target_include_directories(xml-reading PUBLIC ${CMAKE_CURRENT_LIST_DIR}/deps/tinyxml2)\n        \xe2\x94\x82                   target_link_libraries(xml-reading PUBLIC tinyxml2)\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 deps\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt: add_subdirectory(tinyxml2)\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tinyxml2\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会生成一个 xml-reading.dll 文件。

\n\n

但是调平项目链接器选项有/DYNAMICBASE "bin\\windows-32\\debug\\xml-reading.lib" "bin\\windows-32\\debug\\BOBPrimitives.lib" "bin\\windows-32\\debug\\tinyxml2d.lib"

\n\n

其结果是:\n2>LINK : fatal error LNK1104: cannot open file \'bin\\windows-32\\debug\\xml-reading.lib\'

\n\n

这是怎么回事?

\n\n
    \n
  • 我尝试将 SHARED 添加到add_library(xml-reading SHARED ...),但没有帮助
  • \n
  • 作为解决方法,我将 STATIC 设置add_library(xml-reading STATIC ...)为强制它生成 .lib 文件 -但我想了解发生了什么
  • \n
\n