我下载了一个用 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/