我想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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)