何时ExternalProject_Add构build?

何时ExternalProject_Add构build?,第1张

概述何时ExternalProject_Add构build?

我想build立openssl并将我的项目链接到它。 在我的项目中,我有一个名为net的库,它是使用openssl的部分。 所以在我的网 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实际上build立的项目。 如果我让我的networking库取决于openssl,这是否意味着当我build网时,需要先检查并build立openssl?

文件所有者:组不会更改位置/ proc / <pID> /后setuID()?

如何查找给定的应用程序是否是单实例?

Delphi 7的forms,主持人不在Vista中工作

C ++ windows CreateChildProcess – 隐藏/不显示subprocess的控制台窗口

如何监控使用java的窗口进程?

谢谢,杰瑞

中断可以这样编程吗?

Process.exitValue()和Process.destroy()function

在C ++中统计相同的正在运行的进程

应用程序终止,多个嵌套的subprocess

一个进程的内存量如何确定?

安装错过

首先我想你错过了一个安装步骤。 请参阅文档 :

nmake -f“ms ntdll.mak”安装

所以ExternalProject_Add简化版本是:

ExternalProject_Add( OpenSSL URL https://github.com/openssl/openssl/archive/OpenSSL_1_0_1h.tar.gz CONfigURE_COMMAND perl Configure VC-WIN64A "--prefix=${CMAKE_INSTALL_PREFIX}" BUILD_COMMAND "ms\do_win64a.bat" COMMAND nmake -f "ms\ntdll.mak" BUILD_IN_SOURCE 1 INSTALL_COMMAND nmake -f "ms\ntdll.mak" install )

找到OpenSSL

其次,如果你想找到openssl库和头文件,你需要使用find_package(OpenSSL)命令:

find_package(OpenSSL required) message("libs: ${OPENSSL_liBRARIES}") message("Includes: ${OPENSSL_INCLUDE_DIR}")

构建

现在,如果将所有这些命令放在一个项目中,配置步骤将失败:)因为这不是ExternalProject设计的方式。 由一个或几个ExternalProject_Add命令所做的Superbuild必须先配置,然后构建步骤将从外部存档安装库。 这将与你的项目冲突,因为openssl库不能被发现 – 它们不是由superbuild安装。

固定

拆分cmake代码。 先运行superbuild (即下载并安装openssl):

> cmake -Hsuperbuild -B_buildssuperbuild "-GVisual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=extinstall # note,no extinstall directory yet > cmake --build _buildssuperbuild # install done,librarIEs can be found in extinstall

然后建立你的项目 ,注意在配置步骤找到的库:

> cmake -Huse -B_buildsuse "-GVisual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=extinstall -- Found OpenSSL: .../ext/install/lib/ssleay32.lib;.../ext/install/lib/libeay32.lib (found version "1.0.1h") libs: .../ext/install/lib/ssleay32.lib;.../ext/install/lib/libeay32.lib Includes: .../ext/install/include > cmake --build _buildsuse # OK

试验

我有一个实验项目,将所有这些噪音都包含在一个命令中(windows在Visual Studio 2013上测试过):

hunter_add_package(OpenSSL) find_package(OpenSSL required)

https://github.com/ruslo/hunter

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

默认情况下,什么都不依赖于自定义目标 使用ADD_DEPENDENCIES向其他目标添加依赖关系。

所以如果没有项目依赖它,它将不会默认生成。

当这个ExternalProject_Add实际上建立项目?

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

如果我让我的网络库取决于openssl,这是否意味着当我建网时,需要先检查并建立openssl?

没有。因为你做的依赖,cmake将处理它,openssl将建立在你的库之前。

PS:还有很多工作要做。 因为cmake不知道openssl的结果是什么,你的项目可能会出现链接错误。 下面是一个很好的例子 : “用cmake构建boost的最佳方式是什么”。它使用add_library和set_target_propertIEs importED GLOBAL , set_target_propertIEs和set_target_propertIEs importED_LOCATION_*来解决问题

总结

以上是内存溢出为你收集整理的何时ExternalProject_Add构build?全部内容,希望文章能够帮你解决何时ExternalProject_Add构build?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存