【发布时间】:2015-05-06 17:33:25
【问题描述】:
我对 cmake 和 mingw 都不是很熟悉。
我有一些可以用它构建的源代码(构建过程可以很好地使用mingw32-make)。问题是,我想输出 DLL 而不是 .exe 文件。
我有一些CMakeList 文件,我相信它存储了我必须更改的配置(该部分应该负责为Examples/ 目录中的.cpp 文件生成.exe 文件,并考虑到一些依赖项):
# C examples
if(PSMOVE_BUILD_EXAMPLES)
foreach(EXAMPLE example multiple dump_calibration battery_check)
add_executable(${EXAMPLE} examples/c/${EXAMPLE}.c)
target_link_libraries(${EXAMPLE} psmoveapi)
endforeach()
if(PSMOVE_BUILD_TRACKER AND PSMOVE_BUILD_TUIO_SERVER)
include_directories(${PSMOVEAPI_SOURCE_DIR}/external/TUIO_CPP/TUIO)
include_directories(${PSMOVEAPI_SOURCE_DIR}/external/TUIO_CPP/oscpack)
add_executable(tuio_server examples/c/tuio_server.cpp
external/TUIO_CPP/TUIO/TuioClient.cpp
...
external/TUIO_CPP/oscpack/ip/win32/NetworkingUtils.cpp
external/TUIO_CPP/oscpack/ip/win32/UdpSocket.cpp)
set_target_properties(tuio_server PROPERTIES
COMPILE_FLAGS -DOSC_HOST_LITTLE_ENDIAN)
target_link_libraries(tuio_server psmoveapi psmoveapi_tracker)
else()
# Disable the TUIO Server if we don't build the tracker
set(PSMOVE_BUILD_TUIO_SERVER OFF)
endif()
if(PSMOVE_BUILD_TRACKER)
foreach(EXAMPLE distance_calibration)
add_executable(${EXAMPLE} examples/c/${EXAMPLE}.c)
target_link_libraries(${EXAMPLE} psmoveapi psmoveapi_tracker)
endforeach()
endif()
endif()
我想我应该在某处添加-DBUILDING_EXAMPLE_DLL 和-shared 选项。但具体在哪里?还是我没抓住重点?
【问题讨论】:
-
要创建一个 dll 你需要
add_library(mydlltarget SHARED mysourcefiles)而不是add_executable(myexetarget mysourcefiles) -
哇,这将是这里唯一的变化?相当强大;)
-
您可能需要更改要导出的类的标题。我不熟悉 mingw dll,所以对此我无能为力。
-
嗯。看起来和 Visual Studio 一样:mingw.org/wiki/sampledll 参见关于
EXAMPLE_DLL的部分。 -
是的,确实 :) 你能从你的 cmets 那里得到答案吗?我可以接受。