在 Visual studio 2017 中使用 CMake 添加对静态库的依赖项不起作用

问题描述 投票:0回答:1

我正在尝试将一个大项目(包含可执行文件、动态库和静态库)转换为使用 CMake 构建系统。我在向静态库添加依赖项时遇到问题。

我有一个根 CMake,它将调用子目录列表

cmake_minimum_required(VERSION 3.8.0)
project(CC)
add_subdirectory(SmartCardUtility)
add_subdirectory(CertificateUtil)
..

CertificateUtil 下的 CMakeLists.txt 文件如下所示。

project(CertificateUtil CXX)
source grouping....
include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../../Output/_INC_DEV")
link_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../OpenSSL")
add_library(${PROJECT_NAME} STATIC ${ALL_FILES})
target_link_libraries(${PROJECT_NAME} libcrypto)

在上面的代码中,如果将 add_library 替换为 add_executable 或 add_library with SHARED,则依赖关系将被正确解析并显示在Additional_Dependencies 中,但对于静态库,属性页中的Additional_Dependencies 始终为空。

在网上冲浪之后,我了解到 target_link_libraries 命令不会在 Librarian 中添加任何内容。那么问题是,向静态库添加依赖项的正确方法是什么,以便它们显示在 Librarian 下的 Another_Dependencies 中?

我尝试将依赖项添加为导入对象,如下所示,但仍然不起作用。

add_library(libcrypto OBJECT IMPORTED)
set_property(TARGET libcrypto PROPERTY  IMPORTED_OBJECTS "${CMAKE_CURRENT_SOURCE_DIR}/../../OpenSSL/libcrypto.lib")
add_library(${PROJECT_NAME} STATIC ${ALL_FILES} $<TARGET_OBJECTS:libcrypto>)
c++ cmake visual-studio-2017 dependencies static-libraries
1个回答
0
投票

我在 CMake 的 gitlab 上看到了类似的问题https://gitlab.kitware.com/cmake/cmake/-/issues/16931.

有人建议使用:

set ( CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} somelib.lib" )

这对我有用,我能够复制 Visual Studio 的 Librarian Addition Dependency。我认为你可以通过添加来解决这个问题:

set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} libcrypto")

您可以列出不同库的多个路径,它们将包含在生成的 .lib 文件中

© www.soinside.com 2019 - 2024. All rights reserved.