CMAKE共享库仅创建DLL,而不创建关联的库

CMAKE共享库仅创建DLL,而不创建关联的库,cmake,Cmake,我正在使用CMAKE为Visual Studio配置我的项目,我有以下设置: PROJECT(Proj1) CMAKE_MINIMUM_REQUIRED(VERSION 3.2.0) # RPATH stuff - to avoid losing linking information SET(CMAKE_SKIP_BUILD_RPATH FALSE) SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) SET(CMAKE_INSTALL_RPATH "${CMA

我正在使用CMAKE为Visual Studio配置我的项目,我有以下设置:

PROJECT(Proj1)
CMAKE_MINIMUM_REQUIRED(VERSION 3.2.0)
# RPATH stuff - to avoid losing linking information
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)


# Variable for header and source files
SET(HEADERS
  api/mylib.h   
)
SET(SOURCES
  api/mylib.cpp
)

# Compile and link
ADD_LIBRARY(${NAME} SHARED ${HEADERS} ${SOURCES})
TARGET_LINK_LIBRARIES(${NAME} ${LIBS})
现在,这将创建项目,我可以编译它,但它只生成
Proj1.dll
文件,而不生成关联的
lib
文件。我认为库和共享对象文件都应该生成


我正在使用
CMAKE 3.11.0
Visual Studio Community 2017

创建静态库。lib,您必须使用静态关键字而不是共享关键字

ADD_LIBRARY(${NAME} STATIC ${HEADERS} ${SOURCES})
看看:

您是否使用
\uuu declspec(dllexport)
从该DLL导出任何函数?啊,啊,啊……不,好的。这是我必须调查的事情。我从来没有在Linux上这样做过。哦,好的,如果没有任何东西被导出,那么将不会生成存档…然后请查看
generate\u export\u header
函数是否适合您。我不明白为什么这个答案被否决了。。我用它来构建静态库。问题是关于共享库而不是静态库。问题是“CMAKE共享库只创建DLL而不是关联库”。用户询问关于创建静态libraryNo的问题。我问g为什么归档文件不与DLL一起创建。如其他注释中所述,需要在windows上添加函数导出指令。如果有人无意中发现此对话,MSVC/windows会对静态库和导出头使用相同的文件扩展名(.lib),这是链接到DLL所必需的。.lib文件的存在是编译时要求,而.dll文件的存在是运行时要求。