SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
1
DIVIDE AND MANAGE WITHDIVIDE AND MANAGE WITH
CONAN.IOCONAN.IO
Pavel.Filonov@kaspersky.com
2
C++ PROVIDES CONTROLC++ PROVIDES CONTROL
Example: parameter passing
f(X)1.
f(X&)2.
f(const X&)3.
f(X*)4.
f(const X*)5.
f(X&&)6.
template<class T> f(T&&)7.
f(owner<X*>)8.
f(not_null<X*>)9.
f(unique_ptr<X>)10.
f(shared_ptr<X>)11.
3
C++ PROVIDES PORTABILITYC++ PROVIDES PORTABILITY
But how we could build all of this!
4
C++ BUILD TOOLSC++ BUILD TOOLS
CMake
qmake
bazel
ninja
meson
maiken
Scons
...
Ok. But who will manage our dependencies?
5
C++ PACKAGE MANAGERSC++ PACKAGE MANAGERS
Linux
apt, yum, portage, pacman, ...
Macos
MacPorts, Fink, Homebrew, ...
Windows
Nuget, Chocolatey
Cross-plarform
cpm, hunter, ExternalProject_Add
<self-written scripts on python, perl, bash, cmake>
biicode
conan
6
"HELLO, WORLD" IN TDD STYLE"HELLO, WORLD" IN TDD STYLE
hello.h
#ifndef HELLO_H
#define HELLO_H
#include <ostream>
std::ostream& hello(std::ostream&);
#endif
test_hello.cpp
void test_hello() {
std::stringstream ss;
hello(ss);
assert("Hello, world" == ss.str());
}
7
BUILD CONFIGURATIONBUILD CONFIGURATION
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(hello CXX)
set(${PROJECT_NAME}_SOURCES
${CMAKE_SOURCE_DIR}/src/hello.cpp
)
set(${PROJECT_NAME}_HEADERS
${CMAKE_SOURCE_DIR}/include/hello.h
)
include_directories(include)
add_executable(${PROJECT_NAME}
${CMAKE_SOURCE_DIR}/src/main.cpp
${${PROJECT_NAME}_SOURCES}
${${PROJECT_NAME}_HEADERS}
)
enable_testing()
add_subdirectory(test)
TRAVIS CI CONFIGURATIONTRAVIS CI CONFIGURATION
.travis.yml
sudo: required
dist: trusty
script:
- mkdir build && cd build
- cmake ..
- cmake --build .
- ctest
matrix:
include:
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.9
env: CXX=g++-4.9
- os: linux
addons:
8
packages:
- g++-5
env: CXX=g++-5
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-6
env: CXX=g++-6
- os: linux
addons:
apt:
sources:
- ubuntu-toolchain-r-test
9
PROFIT!PROFIT!
10
APPVEYOR CONFIGURATIONAPPVEYOR CONFIGURATION
appveyor.yml
build:
build_script:
- mkdir build && cd build
- cmake -G "%TOOLCHAIN_VERSION%" ..
- cmake --build . --config release
test_script:
- cmd: ctest -C release -VV
environment:
matrix:
- TOOLCHAIN_VERSION: Visual Studio 14 2015
- TOOLCHAIN_VERSION: Visual Studio 12 2013
- TOOLCHAIN_VERSION: Visual Studio 11 2012
11
WE NEED MORE BUILDSWE NEED MORE BUILDS
12
NOW WE WANT TO USE GOOGLETESTNOW WE WANT TO USE GOOGLETEST
#include <sstream>
#include <iostream>
#include <gtest/gtest.h>
#include <hello.h>
TEST(hello, simple) {
std::stringstream ss;
hello(ss);
ASSERT_EQ("Hello, world", ss.str());
}
But how build it on CI?
13
HERE COMES CONANHERE COMES CONAN
pip install conan
conanfile.txt
[requires]
gtest/1.7.0@lasote/stable
[generators]
cmake
CMakeLists.txt
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
14
INSTALL DEPENDENCIESINSTALL DEPENDENCIES
$conan install
Requirements
gtest/1.7.0@lasote/stable from conan.io
Packages
gtest/1.7.0@lasote/stable:ee666ea2ce
gtest/1.7.0@lasote/stable: Installing package ee666ea2ce
gtest/1.7.0@lasote/stable: Looking for package ee666ea2ce in remote 'conan.io'
Downloading conan_package.tgz
[==================================================]
Downloading conanmanifest.txt
[==================================================]
Downloading conaninfo.txt
[==================================================]
gtest/1.7.0@lasote/stable: Package installed ee666ea2ce
PROJECT: Generated cmake created conanbuildinfo.cmake
PROJECT: Generated conaninfo.txt
15
IF NO BINARY PACKAGE FOUNDIF NO BINARY PACKAGE FOUND
$conan install --build=missing
gtest/1.7.0: WARN: Binary for ad55876aa not in remote: Package not found!
gtest/1.7.0: Building your package in ~/.conan/data/gtest/1.7.0/lasote
gtest/1.7.0: Configuring sources in ~/.conan/data/gtest/1.7.0/lasote/stable/
[==================================================]
Unzipping 4.8 MB, this can take a while
gtest/1.7.0: Copying sources to build folder
gtest/1.7.0: Generated cmake created conanbuildinfo.cmake
-- The C compiler identification is GNU 6.1.1
-- The CXX compiler identification is GNU 6.1.1
...
gtest/1.7.0 package(): Copied 20 '.h' files
gtest/1.7.0 package(): Copied 2 '.so' files: libgtest_main.so, libgtest.so
gtest/1.7.0: Package 'ad55876aa' created
PROJECT: Generated cmake created conanbuildinfo.cmake
PROJECT: Generated conaninfo.txt
16
USING CONAN ON CIUSING CONAN ON CI
.travis.yml
before_install:
- sudo pip install conan
install:
- conan install --build=missing
appveyor.yml
install:
- set PATH=%PATH%;%PYTHON%/Scripts/
- pip.exe install conan # It install conan too
- conan install --build=missing
17
CONAN REPOSITORY PACKAGE LISTCONAN REPOSITORY PACKAGE LIST
18
HOW TO BUILD OWN PACKAGEHOW TO BUILD OWN PACKAGE
conanfile.py
class LibrabbitmqConan(ConanFile):
name = "librabbitmq"
version = "0.8.1"
def source(self):
self.run("git clone https://github.com/alanxz/rabbitmq-c.git")
def build(self):
cmake = CMake(self.settings)
self.run("cmake -DENABLE_SSL_SUPPORT=OFF "
"%s/rabbitmq-c %s" % (self.conanfile_directory,
cmake.command_line))
self.run("cmake --build . %s" % cmake.build_config)
def package(self):
self.copy("*.h", dst="include", src="rabbitmq-c/librabbitmq")
conan export demo/testing
19
CONAN PRIVATE REPOSITORYCONAN PRIVATE REPOSITORY
Get sources
$ git clone https://github.com/conan-io/conan.git
$ cd conan
$ git checkout master
$ pip install -r conans/requirements.txt
$ pip install -r conans/requirements_server.txt
$ pip install gunicorn
Run server
gunicorn -b 0.0.0.0:9300 -w 4 -t 120 
conans.server.server_launcher:app
Upload packages
$ conan upload librabbitmq/0.8.1@demo/testing
20
CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS
build.py
from conan.packager import ConanMultiPackager
if __name__ == "__main__":
builder = ConanMultiPackager()
builder.add_common_builds(pure_c=True)
builder.run()
CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS
.travis.yml
os: linux
services:
- docker
sudo: required
language: python
env:
matrix:
- CONAN_GCC_VERSIONS=4.6 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=4.8 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=4.9 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=5.2 CONAN_USE_DOCKER=1
- CONAN_GCC_VERSIONS=5.3 CONAN_USE_DOCKER=1
global:
- CONAN_UPLOAD=1
- CONAN_REFERENCE="librabbitmq/0.8.1"
- CONAN_USERNAME="filonovpv"
- CONAN_CHANNEL="testing"
- CONAN_TOTAL_PAGES=1
- CONAN_CURRENT_PAGE=1 21
osx_image: xcode7.3 # apple-clang 7.3
language: generic
env:
- os: osx
osx_image: xcode7.1 # apple-clang 7.0
language: generic
env:
- os: osx
osx_image: xcode6.4 # apple-clang 6.1
language: generic
env:
- os: osx
osx_image: xcode6.2 # apple-clang 6.0
language: generic
env:
CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS
appveyor.yml
build: false
environment:
PYTHON: "C:Python27"
PYTHON_VERSION: "2.7.8"
PYTHON_ARCH: "32"
CONAN_UPLOAD: 1
CONAN_REFERENCE: "librabbitmq/0.8.1"
CONAN_USERNAME: "filonovpv"
CONAN_CHANNEL: "testing"
CONAN_TOTAL_PAGES: 4
matrix:
- CONAN_CURRENT_PAGE: 1
- CONAN_CURRENT_PAGE: 2
- CONAN_CURRENT_PAGE: 3
- CONAN_CURRENT_PAGE: 4
install:
# Workaround for CMake not wanting sh.exe on PATH for MinGW
- set PATH=%PATH:C:Program FilesGitusrbin;=%
22
test_script:
- python build.py
CREATED PACKAGESCREATED PACKAGES
24
CREATED PACKAGESCREATED PACKAGES
25
CREATED PACKAGESCREATED PACKAGES
26
CONCLUSIONSCONCLUSIONS
Positive points
build scripts on python
public repository
private repository
build matrix
Negative points
build scripts on python
small number of packages in the official repository
small amount of documentation
27
REFERENCESREFERENCES
Conan - C/C++ package manager - ,1.
conan.io c++ package manager demo with sfml -2.
CppCon 2014: Lightning Talks - Boris Kolpackov "C++
Package Manager" -
3.
Diego Rodriguez-Losada: Biicode, a C/C++ dependency
manager with a hosting service -
4.
Diego Rodriguez-Losada: Why in heaven is there no
dependency management for C++? -
5.
Arne Mertz, Using Conan for Third Party Libraries -6.
Programming C++ With The 4 Cs: Clang, Cmake, Clion
And Conan -
7.
Site Source
Video
Video
Video
Video
Blogpost
Blogpost
28
THANK YOU FOR YOUR ATTENTION!THANK YOU FOR YOUR ATTENTION!
Contacts:
email Pavel.Filonov@kaspersky.com
github
twitter @filonovpv
sdukshis

Weitere ähnliche Inhalte

Was ist angesagt?

Building a network emulator with Docker and Open vSwitch
Building a network emulator with Docker and Open vSwitchBuilding a network emulator with Docker and Open vSwitch
Building a network emulator with Docker and Open vSwitchGoran Cetusic
 
[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺InfraEngineer
 
Service Discovery for Continuous Delivery with Docker
Service Discovery for Continuous Delivery with DockerService Discovery for Continuous Delivery with Docker
Service Discovery for Continuous Delivery with DockerTim Nolet
 
Connecting to the network
Connecting to the networkConnecting to the network
Connecting to the networkMu Chun Wang
 
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2Kentaro Ebisawa
 
Lamp configuration u buntu 10.04
Lamp configuration   u buntu 10.04Lamp configuration   u buntu 10.04
Lamp configuration u buntu 10.04mikehie
 
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...NETWAYS
 
DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)Soshi Nemoto
 
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby Michelle Antebi
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environmentSoshi Nemoto
 
nginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよnginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよmamoru tateoka
 
OpenCSW - What is the project about?
OpenCSW - What is the project about?OpenCSW - What is the project about?
OpenCSW - What is the project about?dmichelsen
 
Advanced Replication
Advanced ReplicationAdvanced Replication
Advanced ReplicationMongoDB
 
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...addame
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)I Goo Lee
 
All bugfixes are incompatibilities
All bugfixes are incompatibilitiesAll bugfixes are incompatibilities
All bugfixes are incompatibilitiesnagachika t
 
Openstack kilo installation using rdo
Openstack kilo installation using rdoOpenstack kilo installation using rdo
Openstack kilo installation using rdoNarasimha sreeram
 

Was ist angesagt? (20)

Building a network emulator with Docker and Open vSwitch
Building a network emulator with Docker and Open vSwitchBuilding a network emulator with Docker and Open vSwitch
Building a network emulator with Docker and Open vSwitch
 
[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺
 
Service Discovery for Continuous Delivery with Docker
Service Discovery for Continuous Delivery with DockerService Discovery for Continuous Delivery with Docker
Service Discovery for Continuous Delivery with Docker
 
DockerCoreNet
DockerCoreNetDockerCoreNet
DockerCoreNet
 
GoLang & GoatCore
GoLang & GoatCore GoLang & GoatCore
GoLang & GoatCore
 
Connecting to the network
Connecting to the networkConnecting to the network
Connecting to the network
 
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
Quick Start Guide using Virtuozzo 7 (β) on AWS EC2
 
Lamp configuration u buntu 10.04
Lamp configuration   u buntu 10.04Lamp configuration   u buntu 10.04
Lamp configuration u buntu 10.04
 
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
Puppet Camp Berlin 2015: Pedro Pessoa | Puppet at the center of everything - ...
 
DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)
 
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment
 
nginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよnginxをソースからインストールしてみたよ
nginxをソースからインストールしてみたよ
 
OpenCSW - What is the project about?
OpenCSW - What is the project about?OpenCSW - What is the project about?
OpenCSW - What is the project about?
 
Linux administration ii-parti
Linux administration ii-partiLinux administration ii-parti
Linux administration ii-parti
 
Advanced Replication
Advanced ReplicationAdvanced Replication
Advanced Replication
 
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
Montreal On Rails 5 : Rails deployment using : Nginx, Mongrel, Mongrel_cluste...
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
 
All bugfixes are incompatibilities
All bugfixes are incompatibilitiesAll bugfixes are incompatibilities
All bugfixes are incompatibilities
 
Openstack kilo installation using rdo
Openstack kilo installation using rdoOpenstack kilo installation using rdo
Openstack kilo installation using rdo
 

Andere mochten auch

Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++NextSergey Platonov
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itSergey Platonov
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit TestingDmitry Vyukov
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейSergey Platonov
 
Managing modular software for your nu get, c++ and java development
Managing modular software for your nu get, c++ and java developmentManaging modular software for your nu get, c++ and java development
Managing modular software for your nu get, c++ and java developmentBaruch Sadogursky
 
Unit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by ExampleUnit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by ExampleBenjamin Eberlei
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency InjectionPlatonov Sergey
 
Василий Сорокин, “Google C++ Mocking and Test Frameworks”
Василий Сорокин, “Google C++ Mocking and Test Frameworks”Василий Сорокин, “Google C++ Mocking and Test Frameworks”
Василий Сорокин, “Google C++ Mocking and Test Frameworks”Platonov Sergey
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыPlatonov Sergey
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
 
Practical unit testing in c & c++
Practical unit testing in c & c++Practical unit testing in c & c++
Practical unit testing in c & c++Matt Hargett
 
Clean Unit Test Patterns
Clean Unit Test PatternsClean Unit Test Patterns
Clean Unit Test PatternsFrank Appel
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17Sergey Platonov
 
Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Lars Thorup
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 

Andere mochten auch (20)

Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit Testing
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексией
 
Managing modular software for your nu get, c++ and java development
Managing modular software for your nu get, c++ and java developmentManaging modular software for your nu get, c++ and java development
Managing modular software for your nu get, c++ and java development
 
Unit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by ExampleUnit-Testing Bad-Practices by Example
Unit-Testing Bad-Practices by Example
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
 
Василий Сорокин, “Google C++ Mocking and Test Frameworks”
Василий Сорокин, “Google C++ Mocking and Test Frameworks”Василий Сорокин, “Google C++ Mocking and Test Frameworks”
Василий Сорокин, “Google C++ Mocking and Test Frameworks”
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансы
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
Practical unit testing in c & c++
Practical unit testing in c & c++Practical unit testing in c & c++
Practical unit testing in c & c++
 
Clean Unit Test Patterns
Clean Unit Test PatternsClean Unit Test Patterns
Clean Unit Test Patterns
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
 
Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++Automated Testing for Embedded Software in C or C++
Automated Testing for Embedded Software in C or C++
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 

Ähnlich wie Павел Филонов, Разделяй и управляй вместе с Conan.io

Conan a C/C++ Package Manager
Conan a C/C++ Package ManagerConan a C/C++ Package Manager
Conan a C/C++ Package ManagerUilian Ries
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)Soshi Nemoto
 
Vagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopVagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopLorin Hochstein
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
 
青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes 青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes Zhichao Liang
 
Docker Compose and Panamax - ContainerDays Boston - June 2015
Docker Compose and Panamax - ContainerDays Boston - June 2015Docker Compose and Panamax - ContainerDays Boston - June 2015
Docker Compose and Panamax - ContainerDays Boston - June 2015Jonas Rosland
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on DockerDaniel Ku
 
Node.js basics
Node.js basicsNode.js basics
Node.js basicsBen Lin
 
Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Halil Kaya
 
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdfKubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdfSrinivasa Rao
 
Domino9on centos6
Domino9on centos6Domino9on centos6
Domino9on centos6a8us
 
Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile InfrastructuresAntons Kranga
 
Dependency Management in C++ (NDC TechTown 2021)
Dependency Management in C++ (NDC TechTown 2021)Dependency Management in C++ (NDC TechTown 2021)
Dependency Management in C++ (NDC TechTown 2021)Patricia Aas
 
Continuous delivery with docker
Continuous delivery with dockerContinuous delivery with docker
Continuous delivery with dockerJohan Janssen
 
Linux Containers From Scratch: Makfile MicroVPS
Linux Containers From Scratch: Makfile MicroVPSLinux Containers From Scratch: Makfile MicroVPS
Linux Containers From Scratch: Makfile MicroVPSjoshuasoundcloud
 
Install Cuckoo on Mac OS X
Install Cuckoo on Mac OS XInstall Cuckoo on Mac OS X
Install Cuckoo on Mac OS XMohd Khairulazam
 

Ähnlich wie Павел Филонов, Разделяй и управляй вместе с Conan.io (20)

Conan a C/C++ Package Manager
Conan a C/C++ Package ManagerConan a C/C++ Package Manager
Conan a C/C++ Package Manager
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)
 
Vagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptopVagrant, Ansible, and OpenStack on your laptop
Vagrant, Ansible, and OpenStack on your laptop
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Kickstart
KickstartKickstart
Kickstart
 
青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes 青云CoreOS虚拟机部署kubernetes
青云CoreOS虚拟机部署kubernetes
 
Docker Compose and Panamax - ContainerDays Boston - June 2015
Docker Compose and Panamax - ContainerDays Boston - June 2015Docker Compose and Panamax - ContainerDays Boston - June 2015
Docker Compose and Panamax - ContainerDays Boston - June 2015
 
Zenoss: Buildout
Zenoss: BuildoutZenoss: Buildout
Zenoss: Buildout
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on Docker
 
Node.js basics
Node.js basicsNode.js basics
Node.js basics
 
RDO-Packstack Workshop
RDO-Packstack Workshop RDO-Packstack Workshop
RDO-Packstack Workshop
 
Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36Infrastructure as code - Python Saati #36
Infrastructure as code - Python Saati #36
 
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdfKubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
Kubernetes+-CKA-+0400+-+Application+Lifecycle+Management.pdf
 
Domino9on centos6
Domino9on centos6Domino9on centos6
Domino9on centos6
 
Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
 
Dependency Management in C++ (NDC TechTown 2021)
Dependency Management in C++ (NDC TechTown 2021)Dependency Management in C++ (NDC TechTown 2021)
Dependency Management in C++ (NDC TechTown 2021)
 
Continuous delivery with docker
Continuous delivery with dockerContinuous delivery with docker
Continuous delivery with docker
 
Linux Containers From Scratch: Makfile MicroVPS
Linux Containers From Scratch: Makfile MicroVPSLinux Containers From Scratch: Makfile MicroVPS
Linux Containers From Scratch: Makfile MicroVPS
 
Docker
DockerDocker
Docker
 
Install Cuckoo on Mac OS X
Install Cuckoo on Mac OS XInstall Cuckoo on Mac OS X
Install Cuckoo on Mac OS X
 

Mehr von Sergey Platonov

Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаSergey Platonov
 
Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Sergey Platonov
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtSergey Platonov
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereSergey Platonov
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеSergey Platonov
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Sergey Platonov
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Sergey Platonov
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Sergey Platonov
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLSergey Platonov
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 
Алексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляАлексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляSergey Platonov
 
Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Sergey Platonov
 
Дмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репортДмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репортSergey Platonov
 

Mehr von Sergey Platonov (20)

Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhere
 
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STL
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
Алексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляАлексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуля
 
Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++
 
Дмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репортДмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репорт
 

Kürzlich hochgeladen

WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 

Kürzlich hochgeladen (20)

WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 

Павел Филонов, Разделяй и управляй вместе с Conan.io

  • 1. 1 DIVIDE AND MANAGE WITHDIVIDE AND MANAGE WITH CONAN.IOCONAN.IO Pavel.Filonov@kaspersky.com
  • 2. 2 C++ PROVIDES CONTROLC++ PROVIDES CONTROL Example: parameter passing f(X)1. f(X&)2. f(const X&)3. f(X*)4. f(const X*)5. f(X&&)6. template<class T> f(T&&)7. f(owner<X*>)8. f(not_null<X*>)9. f(unique_ptr<X>)10. f(shared_ptr<X>)11.
  • 3. 3 C++ PROVIDES PORTABILITYC++ PROVIDES PORTABILITY But how we could build all of this!
  • 4. 4 C++ BUILD TOOLSC++ BUILD TOOLS CMake qmake bazel ninja meson maiken Scons ... Ok. But who will manage our dependencies?
  • 5. 5 C++ PACKAGE MANAGERSC++ PACKAGE MANAGERS Linux apt, yum, portage, pacman, ... Macos MacPorts, Fink, Homebrew, ... Windows Nuget, Chocolatey Cross-plarform cpm, hunter, ExternalProject_Add <self-written scripts on python, perl, bash, cmake> biicode conan
  • 6. 6 "HELLO, WORLD" IN TDD STYLE"HELLO, WORLD" IN TDD STYLE hello.h #ifndef HELLO_H #define HELLO_H #include <ostream> std::ostream& hello(std::ostream&); #endif test_hello.cpp void test_hello() { std::stringstream ss; hello(ss); assert("Hello, world" == ss.str()); }
  • 7. 7 BUILD CONFIGURATIONBUILD CONFIGURATION CMakeLists.txt cmake_minimum_required(VERSION 2.8.12) project(hello CXX) set(${PROJECT_NAME}_SOURCES ${CMAKE_SOURCE_DIR}/src/hello.cpp ) set(${PROJECT_NAME}_HEADERS ${CMAKE_SOURCE_DIR}/include/hello.h ) include_directories(include) add_executable(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/src/main.cpp ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS} ) enable_testing() add_subdirectory(test)
  • 8. TRAVIS CI CONFIGURATIONTRAVIS CI CONFIGURATION .travis.yml sudo: required dist: trusty script: - mkdir build && cd build - cmake .. - cmake --build . - ctest matrix: include: - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.9 env: CXX=g++-4.9 - os: linux addons: 8
  • 9. packages: - g++-5 env: CXX=g++-5 - os: linux addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-6 env: CXX=g++-6 - os: linux addons: apt: sources: - ubuntu-toolchain-r-test
  • 11. 10 APPVEYOR CONFIGURATIONAPPVEYOR CONFIGURATION appveyor.yml build: build_script: - mkdir build && cd build - cmake -G "%TOOLCHAIN_VERSION%" .. - cmake --build . --config release test_script: - cmd: ctest -C release -VV environment: matrix: - TOOLCHAIN_VERSION: Visual Studio 14 2015 - TOOLCHAIN_VERSION: Visual Studio 12 2013 - TOOLCHAIN_VERSION: Visual Studio 11 2012
  • 12. 11 WE NEED MORE BUILDSWE NEED MORE BUILDS
  • 13. 12 NOW WE WANT TO USE GOOGLETESTNOW WE WANT TO USE GOOGLETEST #include <sstream> #include <iostream> #include <gtest/gtest.h> #include <hello.h> TEST(hello, simple) { std::stringstream ss; hello(ss); ASSERT_EQ("Hello, world", ss.str()); } But how build it on CI?
  • 14. 13 HERE COMES CONANHERE COMES CONAN pip install conan conanfile.txt [requires] gtest/1.7.0@lasote/stable [generators] cmake CMakeLists.txt include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
  • 15. 14 INSTALL DEPENDENCIESINSTALL DEPENDENCIES $conan install Requirements gtest/1.7.0@lasote/stable from conan.io Packages gtest/1.7.0@lasote/stable:ee666ea2ce gtest/1.7.0@lasote/stable: Installing package ee666ea2ce gtest/1.7.0@lasote/stable: Looking for package ee666ea2ce in remote 'conan.io' Downloading conan_package.tgz [==================================================] Downloading conanmanifest.txt [==================================================] Downloading conaninfo.txt [==================================================] gtest/1.7.0@lasote/stable: Package installed ee666ea2ce PROJECT: Generated cmake created conanbuildinfo.cmake PROJECT: Generated conaninfo.txt
  • 16. 15 IF NO BINARY PACKAGE FOUNDIF NO BINARY PACKAGE FOUND $conan install --build=missing gtest/1.7.0: WARN: Binary for ad55876aa not in remote: Package not found! gtest/1.7.0: Building your package in ~/.conan/data/gtest/1.7.0/lasote gtest/1.7.0: Configuring sources in ~/.conan/data/gtest/1.7.0/lasote/stable/ [==================================================] Unzipping 4.8 MB, this can take a while gtest/1.7.0: Copying sources to build folder gtest/1.7.0: Generated cmake created conanbuildinfo.cmake -- The C compiler identification is GNU 6.1.1 -- The CXX compiler identification is GNU 6.1.1 ... gtest/1.7.0 package(): Copied 20 '.h' files gtest/1.7.0 package(): Copied 2 '.so' files: libgtest_main.so, libgtest.so gtest/1.7.0: Package 'ad55876aa' created PROJECT: Generated cmake created conanbuildinfo.cmake PROJECT: Generated conaninfo.txt
  • 17. 16 USING CONAN ON CIUSING CONAN ON CI .travis.yml before_install: - sudo pip install conan install: - conan install --build=missing appveyor.yml install: - set PATH=%PATH%;%PYTHON%/Scripts/ - pip.exe install conan # It install conan too - conan install --build=missing
  • 18. 17 CONAN REPOSITORY PACKAGE LISTCONAN REPOSITORY PACKAGE LIST
  • 19. 18 HOW TO BUILD OWN PACKAGEHOW TO BUILD OWN PACKAGE conanfile.py class LibrabbitmqConan(ConanFile): name = "librabbitmq" version = "0.8.1" def source(self): self.run("git clone https://github.com/alanxz/rabbitmq-c.git") def build(self): cmake = CMake(self.settings) self.run("cmake -DENABLE_SSL_SUPPORT=OFF " "%s/rabbitmq-c %s" % (self.conanfile_directory, cmake.command_line)) self.run("cmake --build . %s" % cmake.build_config) def package(self): self.copy("*.h", dst="include", src="rabbitmq-c/librabbitmq") conan export demo/testing
  • 20. 19 CONAN PRIVATE REPOSITORYCONAN PRIVATE REPOSITORY Get sources $ git clone https://github.com/conan-io/conan.git $ cd conan $ git checkout master $ pip install -r conans/requirements.txt $ pip install -r conans/requirements_server.txt $ pip install gunicorn Run server gunicorn -b 0.0.0.0:9300 -w 4 -t 120 conans.server.server_launcher:app Upload packages $ conan upload librabbitmq/0.8.1@demo/testing
  • 21. 20 CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS build.py from conan.packager import ConanMultiPackager if __name__ == "__main__": builder = ConanMultiPackager() builder.add_common_builds(pure_c=True) builder.run()
  • 22. CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS .travis.yml os: linux services: - docker sudo: required language: python env: matrix: - CONAN_GCC_VERSIONS=4.6 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=4.8 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=4.9 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=5.2 CONAN_USE_DOCKER=1 - CONAN_GCC_VERSIONS=5.3 CONAN_USE_DOCKER=1 global: - CONAN_UPLOAD=1 - CONAN_REFERENCE="librabbitmq/0.8.1" - CONAN_USERNAME="filonovpv" - CONAN_CHANNEL="testing" - CONAN_TOTAL_PAGES=1 - CONAN_CURRENT_PAGE=1 21
  • 23. osx_image: xcode7.3 # apple-clang 7.3 language: generic env: - os: osx osx_image: xcode7.1 # apple-clang 7.0 language: generic env: - os: osx osx_image: xcode6.4 # apple-clang 6.1 language: generic env: - os: osx osx_image: xcode6.2 # apple-clang 6.0 language: generic env:
  • 24. CONAN BUILD PACKAGE TOOLSCONAN BUILD PACKAGE TOOLS appveyor.yml build: false environment: PYTHON: "C:Python27" PYTHON_VERSION: "2.7.8" PYTHON_ARCH: "32" CONAN_UPLOAD: 1 CONAN_REFERENCE: "librabbitmq/0.8.1" CONAN_USERNAME: "filonovpv" CONAN_CHANNEL: "testing" CONAN_TOTAL_PAGES: 4 matrix: - CONAN_CURRENT_PAGE: 1 - CONAN_CURRENT_PAGE: 2 - CONAN_CURRENT_PAGE: 3 - CONAN_CURRENT_PAGE: 4 install: # Workaround for CMake not wanting sh.exe on PATH for MinGW - set PATH=%PATH:C:Program FilesGitusrbin;=% 22
  • 29. 26 CONCLUSIONSCONCLUSIONS Positive points build scripts on python public repository private repository build matrix Negative points build scripts on python small number of packages in the official repository small amount of documentation
  • 30. 27 REFERENCESREFERENCES Conan - C/C++ package manager - ,1. conan.io c++ package manager demo with sfml -2. CppCon 2014: Lightning Talks - Boris Kolpackov "C++ Package Manager" - 3. Diego Rodriguez-Losada: Biicode, a C/C++ dependency manager with a hosting service - 4. Diego Rodriguez-Losada: Why in heaven is there no dependency management for C++? - 5. Arne Mertz, Using Conan for Third Party Libraries -6. Programming C++ With The 4 Cs: Clang, Cmake, Clion And Conan - 7. Site Source Video Video Video Video Blogpost Blogpost
  • 31. 28 THANK YOU FOR YOUR ATTENTION!THANK YOU FOR YOUR ATTENTION! Contacts: email Pavel.Filonov@kaspersky.com github twitter @filonovpv sdukshis