gpt4 book ai didi

windows - ExternalProject_Add 何时构建?

转载 作者:可可西里 更新时间:2023-11-01 13:40:47 26 4
gpt4 key购买 nike

我想构建 openssl 并将我的项目链接到它。在我的项目中,我有一个名为 net 的库,它是使用 openssl 的部分。所以在我的 net\CMakeList 中,我添加了

include_directories(
../
+ ../../../ext/openssl/inc32/
)
add_library(net STATIC ${sources})
+ ADD_DEPENDENCIES(net openssl)

在我用于组织所有外部库的 ext 文件夹中,我在名为 openssl 的文件夹中有一个新的解压缩的 openssl 源代码。然后我编辑了 ext\CmakeList

message(STATUS "Configuring OpenSSL")
set(openssl_dir openssl)
if (CMAKE_CL_64)
include(ExternalProject)

set(OPENSSL_CONFIGURE perl\ Configure\ VC-WIN64A)
set(OPENSSL_MAKE ms\\do_win64a\ &&\ nmake\ -f\ ms\\ntdll.mak)

ExternalProject_Add(openssl
PREFIX openssl
#-- Download Step ----------
SOURCE_DIR ${CMAKE_SOURCE_DIR}/ext/openssl
#--Configure step ----------
CONFIGURE_COMMAND ${OPENSSL_CONFIGURE}
#--Build Step ----------
BUILD_COMMAND ${OPENSSL_MAKE}
BUILD_IN_SOURCE 1
#--install Step ----------
INSTALL_COMMAND ""}
)

endif()

当我构建时,编译器提示找不到包含文件,并且根本没有构建 openssl 源代码,因为没有 out32dll 和 inc32。

我的问题是:ExternalProject_Add 什么时候实际构建项目?如果我根据 openssl 创建我的网络库,这是否意味着当我构建网络时它需要首先检查和构建 openssl?

最佳答案

ExternalProject 在内部使用add_custom_target 创建项目并根据其文档

By default nothing depends on the custom target. Use ADD_DEPENDENCIES to add dependencies to or from other targets.

所以如果没有项目依赖它,它不会默认构建。

  1. 此 ExternalProject_Add 何时实际构建项目?

    在构建时(而不是在 cmake 时)。

  2. 如果我让我的网络库依赖于 openssl,这是否意味着当我构建网络时它需要先检查并构建 openssl?

    没有。由于您建立了依赖关系,cmake 将处理它并且 openssl 将在您的库之前构建。

PS:还有很多工作要做。因为 cmake 不知道 openssl 结果在哪里,你的项目可能会遇到链接错误。这是 a good example来自"What is the best way to build boost with cmake"的回答.它使用add_libraryIMPORTED GLOBALset_target_propertiesIMPORTED_LOCATION_*来解决问题

关于windows - ExternalProject_Add 何时构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24508888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com