从 Visual studio 个文件构建动态库

Building dynamic library from Visual studio files

我正在为 Python3 编写 C++ 模块。为了让 Python 使用它,我必须将 C++ 源代码构建到动态库中(其中一个要求是 windows- 兼容性)。

源代码已正确编译并与 Cmake 链接(我的 cmake 生成器是 Visual Studio 12 2013 Win64)。但是我必须从 Cmake 文件构建 .dll 文件。如果这里是 Cmake 文件列表:

注意,此列表中没有 Makefile!

如何从这些文件构建 .dll?我尝试了 MinGW 和 GNUwin32,但是 trey 不工作。

我的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.2)
set(CMAKE_VERBOSE_MAKEFILES on)
project(Proj)
set(SOURCE_FILES repeating_count.cpp)

set(BUILD_SHARED_LIBS ON)

set(CMAKE_VERBOSE_MAKEFILE on)
find_package(PythonLibs 3.4 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
python_add_module(repeating_count repeating_count.cpp)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_executable(Proj ${SOURCE_FILES})
target_link_libraries(Proj ${PYTHON_LIBRARIES})

鉴于您使用的是 CMake,您可以通过添加

来实现此目的
set(BUILD_SHARED_LIBS ON)

在你定义你的库之前(也许,就在你的 CMakeLists.txt 的开头)。请参阅此标志的文档 here

或者,您可以通过向您添加 SHARED 标志来直接强制共享库 add_library:

add_library(myLibrary SHARED ${sources})

请参阅有关此 here 的文档。

你修改后的 CMakeLists 应该看起来像

cmake_minimum_required(VERSION 3.2)

set(CMAKE_VERBOSE_MAKEFILES on)
project(Proj)
set(SOURCE_FILES repeating_count.cpp)

set(BUILD_SHARED_LIBS ON)

# Find PythonLibs
find_package(PythonLibs 3.4 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})

# This will create the Proj.dll
add_library(Proj ${SOURCE_FILES})
target_link_libraries(Proj ${PYTHON_LIBRARIES})

关于 -std=c++11 标志 - MSVS 生成器不需要它。如果您真的对确保为任何生成器启用 c++XX 标志的正确方法感兴趣,请查看 target_compile_features.