首页 > 解决方案 > 在 Visual Studio 2017 中使用 CMake 向静态库添加依赖项不起作用

问题描述

我正在尝试将一个大项目(带有可执行文件、动态库和静态库)转换为使用 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 替换为 SHARED,则依赖项会正确解析并显示在 Additional_Dependencies 中,但对于静态库,属性页中的 Additional_Dependencies 始终为空。

在这一点上通过网上冲浪后,我了解 target_link_libraries 命令不会在图书管理员中添加任何内容。那么问题是,将依赖项添加到静态库以便它们显示在 Librarian 下的 Additional_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++cmakevisual-studio-2017dependenciesstatic-libraries

解决方案


推荐阅读