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

时间:2019-02-19 08:04:11

标签: c++ cmake sdk

我已经下载了用C ++(OPC UA)编写的SDK,该SDK在使用Visual Studio 2015进行编译时会创建一个.exe文件。它包含一堆CMake文件。如何看待是否有可能从这样的SDK生成.dll? CMake文件是否包含此信息,或者我必须搜索的标头内是否有任何宏? 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之外,我还需要对源代码进行更改吗?

1 个答案:

答案 0 :(得分:1)

  

它有一堆CMake文件。如何看待是否有可能从这样的SDK生成.dll?是的,CMake文件具有此信息,或者我必须搜索的标头内是否应该有任何宏?

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

  

我打算使用SDK中的代码。除了将CMAKE文件更改为包含dll之外,我还需要对源代码进行更改吗?

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

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