c++ - 使用 CMake 和 VS 从 Windows 上的现有代码生成 dll

标签 c++ cmake sdk

我下载了一个用 C++ (OPC UA) 编写的 SDK,它在使用 Visual Studio 2015 编译时创建了一个 .exe 文件。它有一堆 CMake 文件。如何查看是否可以从这样的 SDK 生成 .dll? CMake 文件是否有此信息,或者我必须搜索的 header 中是否应该有任何宏? SDK 具有我用来创建 .exe 的 Visual Studio 示例项目 (.sln)。 CMakeLists.txt 看起来像这样

project(uasdk)
cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

include(CMakeDependentOption)
include(MessageUtils)
display_project_header("true")

if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src")
    add_subdirectory(src)
endif ()

if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples")
    add_subdirectory(examples)
endif ()

# set CMAKE_INSTALL_MESSAGE to LAZY by default to hide 'Up to date' output when building INSTALL target
if (NOT ${CMAKE_VERSION} VERSION_LESS "3.1")
    set(CMAKE_INSTALL_MESSAGE LAZY CACHE STRING "")
    set(CMAKE_INSTALL_MESSAGE_VALUES "ALWAYS;LAZY;NEVER")
    set_property(CACHE CMAKE_INSTALL_MESSAGE PROPERTY STRINGS ${CMAKE_INSTALL_MESSAGE_VALUES})
endif ()

关于此主题的已经提出的问题来自编写自己的代码的人。我打算使用 SDK 中的代码。除了更改 CMAKE 文件以包含 dll 之外,我还需要更改源代码吗?

最佳答案

It has a bunch of CMake files. How could one see if it is possible to generate a .dll from such an SDK? Do, the CMake files have this information or should there be any MACROS inside the headers I would have to search for ?

如果 CMake 项目生成一个库,那么语句 add_library 必须出现在某处。但是请注意,CMakeLists.txt 文件的层次结构是可能的,例如,您包含的 CMakeLists.txt 添加了两个子目录。还要考虑其中的 CMakeLists.txt 文件。由于生成了可执行文件,因此对 add_executable 的调用也必须出现在某处。

I intend to use the code from the SDK. Apart from changing the CMAKE file to include the dll do I need to make changes in the source code as well?

我不熟悉这个 SDK,但我猜 examples 包含可执行文件的源代码,而 src 包含库的源代码。如果您只是想尝试一些东西,您可以修改示例代码或添加一个新示例。在这种情况下,您只需修改示例目录中的 CMakeLists.txt(即添加新的源代码文件)。

如果要将 SDK 用作外部依赖项,请检查 CMake 模块列表中是否包含 FindNameofmySDK.cmake,或者 SDK 源或安装中的某处是否有 NameofmySDK-config.cmake。在这种情况下,您可以为您的应用程序创建一个 CMake 项目并使用find_package 来查找 SDK。

关于c++ - 使用 CMake 和 VS 从 Windows 上的现有代码生成 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54761349/

相关文章:

cmake - 使用 CMake 生成多个 Code Composer 构建配置

c++ - XCode 编译器错误,使用 CMake 构建的项目

facebook - 加载 facebook SDK 时出现应用程序错误

sdk - Box.com - 使用 As-User header 时未从 new BoxFolder(apiConnection, id) 获得结果

c++ - OpenCV 和 Visual Studio 配置

c++ - std::string 如何管理这个技巧?

c++ - 构建进程控制守护进程 (PCD) 时出错

c++ - 库存大楼

cmake - 什么是 CMAKE_BUILD_TYPE : Debug, Release、RelWithDebInfo 和 MinSizeRel?

qt - 如何使用诺基亚 Qt SDK 为桌面环境开发 Qt 应用程序?