从Visual Studio文件构建动态库

时间:2015-09-14 12:54:57

标签: python c++ visual-studio-2012 cmake extending

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

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

注意,此列表中没有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})

1 个答案:

答案 0 :(得分:1)

鉴于您正在使用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