我正在为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})
答案 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。