c++ - 在 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>)
解决方案
推荐阅读
- linux - 如何通过命令行在 Kali Linux 上将 rtf 转换为 txt 文件?
- reactjs - React 水平时间线不起作用....(我正在使用 Next.js)
- python - 如何使用 Jupyter Notebooks 进行打印
- android - 使用 NavDeepLinkBuilder 构建片段回栈
- html - 模型查看器大纲
- c# - 将自定义 HttpResponseMessage 作为 IActionResult 返回
- github - github是否限制每个用户的个人访问令牌数量
- c - c中的简单字符串修改程序
- mysql - 来自多个mysql表的数据到一个xml
- logstash - Logstash 离线插件 SocketError