本文档翻译自:https://docs.conan.io/en/latest/getting_started.html#an-md5-hash-calculator-using-the-poco-libraries
:::info
Note
创建这个项目的源文件可以在GitHub的示例存储库中找到。
$ git clone https://github.com/conan-io/examples.git && cd examples/libraries/poco/md5
:::
1、在文件夹中创建以下源文件。这将是我们的应用程序的源文件:
md5.cpp¶
#include "Poco/MD5Engine.h"#include "Poco/DigestStream.h"#include <iostream>int main(int argc, char** argv){Poco::MD5Engine md5;Poco::DigestOutputStream ds(md5);ds << "abcdefghijklmnopqrstuvwxyz";ds.close();std::cout << Poco::DigestEngine::digestToHex(md5.digest()) << std::endl;return 0;}
2、我们知道我们的应用程序依赖于Poco库。让我们在 conan-center 中寻找它:
$ conan search poco --remote=conan-centerExisting package recipes:poco/1.8.1poco/1.9.3poco/1.9.4
在搜索中必须指定 remote。否则,它将只搜索本地缓存。
:::info
Note
Conan客户端包含一个在远程存储库中搜索的命令,我们可以尝试 $ Conan search poco --remote=conan-center 您可以很好地使用此命令在您自己的存储库中搜索,但是请注意,此时在ConanCenter中可能会超时。基础设施也正在改进以支持此命令,但同时建议使用ConanCenter UI。
:::
3、我们得到了关于 Poco 的数据。让我们检查一下1.9.4版本包的详细数据:
$ conan inspect poco/1.9.4name: pocoversion: 1.9.4url: https://github.com/conan-io/conan-center-indexhomepage: https://pocoproject.orglicense: BSL-1.0author: Nonedescription: Modern, powerful open source C++ class libraries for building network- and internet-based applications that run on desktop, server, mobile and embedded systems.topics: ('conan', 'poco', 'building', 'networking', 'server', 'mobile', 'embedded')generators: cmakeexports: Noneexports_sources: CMakeLists.txtshort_paths: Falseapply_env: Truebuild_policy: Nonerevision_mode: hashsettings: ('os', 'arch', 'compiler', 'build_type')options:cxx_14: [True, False]enable_apacheconnector: [True, False]enable_cppparser: [True, False]enable_crypto: [True, False][...]default_options:cxx_14: Falseenable_apacheconnector: Falseenable_cppparser: Falseenable_crypto: True[...]
4、接下来我们要指出我们的构建系统所需的依赖包(requires)和生成器(generators)。让我们在项目文件夹中创建一个conanfile.txt,内容如下:
conanfile.txt¶
[requires]poco/1.9.4[generators]cmake
在本例中,我们使用 CMake 来构建项目,这就是为什么要指定 CMake 生成器。这个生成器创建一个conanbuildinfo.cmake 定义cmake变量的文件,包括可以在我们的构建中使用的路径和库名。阅读更多关于 Generators 的信息。
5、下一步,我们将安装所需的依赖包,并生成构建的信息:
$ mkdir build && cd build$ conan install .....Requirementsopenssl/1.0.2t from 'conan-center' - Downloadedpoco/1.9.4 from 'conan-center' - Downloadedzlib/1.2.11 from 'conan-center' - DownloadedPackagesopenssl/1.0.2t:eb50d18a5a5d59bd0c332464a4c348ab65e353bf - Downloadpoco/1.9.4:645aaff0a79e6036c77803601e44677556109dd9 - Downloadzlib/1.2.11:f74366f76f700cc6e991285892ad7a23c30e6d47 - Downloadzlib/1.2.11: Retrieving package f74366f76f700cc6e991285892ad7a23c30e6d47 from remote 'conan-center'Downloading conanmanifest.txt completed [0.25k]Downloading conaninfo.txt completed [0.44k]Downloading conan_package.tgz completed [83.15k]Decompressing conan_package.tgz completed [0.00k]zlib/1.2.11: Package installed f74366f76f700cc6e991285892ad7a23c30e6d47zlib/1.2.11: Downloaded package revision 0openssl/1.0.2t: Retrieving package eb50d18a5a5d59bd0c332464a4c348ab65e353bf from remote 'conan-center'Downloading conanmanifest.txt completed [4.92k]Downloading conaninfo.txt completed [1.28k]Downloading conan_package.tgz completed [3048.81k]Decompressing conan_package.tgz completed [0.00k]openssl/1.0.2t: Package installed eb50d18a5a5d59bd0c332464a4c348ab65e353bfopenssl/1.0.2t: Downloaded package revision 0poco/1.9.4: Retrieving package 645aaff0a79e6036c77803601e44677556109dd9 from remote 'conan-center'Downloading conanmanifest.txt completed [48.75k]Downloading conaninfo.txt completed [2.44k]Downloading conan_package.tgz completed [5128.39k]Decompressing conan_package.tgz completed [0.00k]poco/1.9.4: Package installed 645aaff0a79e6036c77803601e44677556109dd9poco/1.9.4: Downloaded package revision 0conanfile.txt: Generator cmake created conanbuildinfo.cmakeconanfile.txt: Generator txt created conanbuildinfo.txtconanfile.txt: Generated conaninfo.txtconanfile.txt: Generated graphinfo
Conan安装了我们的Poco依赖关系,还安装了 Poco 的依赖包:OpenSSL 和 zlib。它还为我们的构建系统生成了conanbuildinfo.cmake文件。
6、现在,我们来创建构建文件。要注入 Conan 信息,请包含生成的 conanbuildinfo.cmake 文件,如下所示:
cmake_minimum_required(VERSION 2.8.12)project(MD5Encrypter)add_definitions("-std=c++11")include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)conan_basic_setup()add_executable(md5 md5.cpp)target_link_libraries(md5 ${CONAN_LIBS})
7、现在,我们准备构建并运行我们的Encrypter应用程序:
(win)$ cmake .. -G "Visual Studio 16"$ cmake --build . --config Release(linux, mac)$ cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release$ cmake --build ....[100%] Built target md5$ ./bin/md5c3fcd3d76192e4007dfb496cca67e13b
