Lebih dari satu setengah tahun telah berlalu sejak publikasi bagian sebelumnya , banyak fitur diimplementasikan, beberapa rilis dibuat, tetapi ini tidak akan dibahas. Peristiwa penting terjadi beberapa hari yang lalu dalam kehidupan perpustakaan: ditambahkan ke repositori conan utama (conan-center-index). Tentang bagaimana ini terjadi, apa yang harus dilakukan untuk ini, dan apa yang umumnya perlu dilakukan untuk menambahkan perpustakaan Anda di sana, dan kami akan berbicara di bawah potongan.
JFrog melakukan yang terbaik yang mereka bisa
Sebagai permulaan, beberapa kata tentang apa itu conan (alias conan, alias conan.io) dan conan-center-index. Conan adalah paket yang berorientasi pada C ++ dan manajer dependensi (yang lain, tetapi semakin populer dengan cepat). Cukup mudah untuk menginstal, mengkonfigurasi, dan memiliki beberapa kelebihan yang tidak diragukan:
- Itu tidak terikat pada sistem bangunan, kompiler atau sistem operasi tertentu;
- Dapat menggunakan sistem repositori terdistribusi;
- Menggunakan artifactory memungkinkan Anda untuk menggunakan repositori proyek / tim lokal (pribadi);
- Ini mendukung pengiriman dependensi baik dalam bentuk biner (sudah dirakit) dan perakitannya secara lokal dari sumber untuk profil tertentu;
- Relatif mudah untuk dikonfigurasi dan digunakan.
, , , . , , (conan profile) , , . ! on-site- - . -, . , , . ( ).
, . bincrafters β , . bincrafters ( ) : .
, conan.io conan-center-index. β -, . (, β ) pull request . β ( , ) . : jinja2cpp/1.1.0
Nothing to do all day but stay in bed
- , conan.io , , , . . , , β , conan-, . . , bincrafters : https://github.com/bincrafters/templates.
, . , bintray ( ) β . : 130. conan-index ( ) 130 . , Jinja2C++. :
- (Windows/Linux)
- (x86/x64)
- ( MSVC β , gcc β ABI )
- (debug/release)
- (shared/static)
, , , CI . appveyor, travis, Github Actions , β -, , . ? ? ? β¦ .
Errors flying over your head
β1: , , ( ) β , .
β2: , , .
β3: , -, .
![](https://habrastorage.org/webt/yq/h1/rs/yqh1rs5-w7tacjehykdtrjsg8e4.png)
, . , , CI , : "Debug CI build", CI .
, . , - , . β . , . , , ( conan-index bincrafters). , , , , , . , - ( ), . - , issue.
: Jinja2C++ GitHub Actions 30- Linux, 48- Windows, 16 appveyor 5 . : conan-center-index .
If you want to survive, get out of bed!
, . ? :
- , . windows, linux, . CI . .
- (, . .) . conan index . .
- Early Access Programm conan index, . , . issue . : https://github.com/conan-io/conan-center-index/issues/4
- . . , - . , , , , , ( β ). .
- conan-center-index. PR conan.io team.
conan-center-index , : https://github.com/conan-io/conan-center-index/wiki , , - .
You've got your orders better shoot on sight
, . github-, , . , Jinja2C++. β . :
.
+-- recipes
| +-- jinja2cpp
| +-- config.yml
| +-- 1.1.0
| +-- CMakeLists.txt
| +-- conanfile.py
| +-- conandata.yml
| +-- test_package
| +-- CMakeLists.txt
| +-- conanfile.py
:
config.yml
β , :
---
versions:
"1.1.0":
folder: 1.1.0
, , , all, config.yml β ( β ).
1.1.0
, . . . . (conanfile.py), (conandata.yml) test_package, β . , , .
1.1.0/conanfile.py
. β , .
1.1.0/conandata.yml
. , . . , master' . conan-center-index . :
sources:
"1.1.0":
url: https://github.com/jinja2cpp/Jinja2Cpp/archive/1.1.0.tar.gz
sha256: 3d321a144f3774702d3a6252e3a6370cdaff9c96d8761d850bb79cdb45b372c5
- .
1.1.0/CMakeFile.txt
, . , conan', CMake- :
cmake_minimum_required(VERSION 3.4.3)
project(cmake_wrapper)
include(conanbuildinfo.cmake)
conan_basic_setup()
unset (BUILD_SHARED_LIBS CACHE)
if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE ${JINJA2CPP_CONAN_BUILD_TYPE})
endif ()
add_subdirectory(source_subfolder)
? cmake- (conanbuildinfo.cmake), , . , , , , PIC . ( ) CMake- , conan , . β -. , - . β , msbuild.exe.
1.1.0/test_package
. (conanfile.py) (CMakeLists.txt) (main.cpp), - . , "Hello World!".
1.1.0/test_package/conanfile.py
. , -. :
from conans import ConanFile, CMake, tools
import os
class Jinja2CppTestPackage(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "cmake", "cmake_find_package"
def build(self):
cmake = CMake(self)
compiler = self.settings.get_safe("compiler")
if compiler == 'Visual Studio':
runtime = self.settings.get_safe("compiler.runtime")
cmake.definitions["MSVC_RUNTIME_TYPE"] = '/' + runtime
cmake.configure()
cmake.build()
def test(self):
if not tools.cross_building(self.settings):
ext = ".exe" if self.settings.os == "Windows" else ""
bin_path = os.path.join("bin", "jinja2cpp-test-package" + ext)
self.run(bin_path, run_environment=True)
, . β ( build
) ( test
). β . , MSVC. β . , . CMake β cmake
cmake_find_package
. β .
1.1.0/test_package/CMakeLists.txt
:
cmake_minimum_required(VERSION 2.8.0)
project(Jinja2CppTestPackage)
set(CMAKE_CXX_STANDARD 14)
include (${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
find_package(jinja2cpp REQUIRED)
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
if (CMAKE_BUILD_TYPE MATCHES "Debug" AND MSVC_RUNTIME_TYPE)
set (MSVC_RUNTIME_TYPE "${MSVC_RUNTIME_TYPE}d")
endif ()
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MSVC_RUNTIME_TYPE}")
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MSVC_RUNTIME_TYPE}")
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${MSVC_RUNTIME_TYPE}")
set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/PROFILE")
message (STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message (STATUS "USE MSVC RUNTIME: ${MSVC_RUNTIME_TYPE}")
endif()
add_executable(jinja2cpp-test-package main.cpp)
target_link_libraries(jinja2cpp-test-package PRIVATE jinja2cpp::jinja2cpp)
cmake
, , conanbuildinfo.cmake
, cmake_find_package
β find', conan- . : β case-sensitive, (, ) . .
, , , .
1.1.0/test_package/main.cpp
, , conan- :
#include <jinja2cpp/template.h>
#include <iostream>
int main()
{
std::string source = R"(
{{ ("Hello", 'world') | join }}!!!
{{ ("Hello", 'world') | join(', ') }}!!!
{{ ("Hello", 'world') | join(d = '; ') }}!!!
{{ ("Hello", 'world') | join(d = '; ') | lower }}!!!)";
jinja2::Template tpl;
tpl.Load(source);
std::string result = tpl.RenderAsString(jinja2::ValuesMap()).value();
std::cout << result << "\n";
}
! smoke-, . β "!", !
Your finger's on the keyboard
, . , , . β -, PEP8. β , , , . :
import os
from conans import ConanFile, CMake, tools
from conans.errors import ConanInvalidConfiguration
class Jinja2cppConan(ConanFile):
def config_options(self):
def configure(self):
def source(self):
def build(self):
def package(self):
def package_info(self):
conan. :
- config_options β
- configure β
- source β
- build β
- package β ( install, )
- package_info β ,
, . Jinja2C++, CMake-, .
name = "jinja2cpp"
license = "MIT"
homepage = "https://jinja2cpp.dev/"
url = "https://github.com/conan-io/conan-center-index"
description = "Jinja2 C++ (and for C++) almost full-conformance template engine implementation"
topics = ("conan", "cpp14", "cpp17", "jinja2", "string templates", "templates engine")
exports_sources = ["CMakeLists.txt"]
generators = "cmake", "cmake_find_package"
settings = "os", "compiler", "build_type", "arch"
options = {
"shared": [True, False], "fPIC": [True, False]
}
default_options = {'shared': False, "fPIC": True}
requires = (
"variant-lite/1.2.2",
"expected-lite/0.3.0",
"optional-lite/3.2.0",
"string-view-lite/1.3.0",
"boost/1.72.0",
"fmt/6.1.2",
"rapidjson/1.1.0"
)
_source_subfolder = "source_subfolder"
_build_subfolder = "build_subfolder"
_cpp_std = 14
(name
, license
, homepage
, url
, description
, topics
), (generators
, settings
, options
, default_options
), (requires
) , (_source_subfloder
, _build_subfolder
_cpp_std
).
, conan-center-index:
- , community, (
author
); url
conan-center-index;- β
homepage
; - static, shared-. -fPIC. hook-;
- β ( ), , conan-center-index.
config_options
, :
def config_options(self):
if self.settings.os == "Windows":
del self.options.fPIC
Windows fPIC β . .
config
. , . .
def configure(self):
if self.options.shared:
del self.options.fPIC
cppstd = self.settings.get_safe("compiler.cppstd")
if cppstd:
cppstd_pattern = re.compile(r'^(gnu)?(?P<cppstd>\d+)$')
m = cppstd_pattern.match(cppstd)
cppstd_profile = int(m.group("cppstd"))
if cppstd_profile < 14:
raise ConanInvalidConfiguration("Minimum C++ Standard required is 14 (provided '{}')".format(cppstd))
else:
self._cpp_std = cppstd_profile
β shared- fPIC , (14). - , . : ConanInvalidConfiguration
β . , , .
source
:
def source(self):
tools.get(**self.conan_data["sources"][self.version])
extracted_dir = "Jinja2Cpp-" + self.version
os.rename(extracted_dir, self._source_subfolder)
"" .
build
. , . . CMake :
def build(self):
cmake = CMake(self)
cmake.definitions["JINJA2CPP_BUILD_TESTS"] = False
cmake.definitions["JINJA2CPP_STRICT_WARNINGS"] = False
cmake.definitions["JINJA2CPP_BUILD_SHARED"] = self.options.shared
cmake.definitions["JINJA2CPP_DEPS_MODE"] = "conan-build"
cmake.definitions["JINJA2CPP_CXX_STANDARD"] = self._cpp_std
cmake.definitions["JINJA2CPP_CONAN_BUILD_TYPE"] = self.settings.build_type
compiler = self.settings.get_safe("compiler")
if compiler == 'Visual Studio':
runtime = self.settings.get_safe("compiler.runtime")
if runtime == 'MTd':
runtime = 'MT'
if runtime == 'MDd':
runtime = 'MD'
cmake.definitions["JINJA2CPP_MSVC_RUNTIME_TYPE"] = '/' + runtime
cmake.configure(build_folder=self._build_subfolder)
cmake.build()
, , cmake' . CMake- , Jinja2C++, .
package
, . , :
def package(self):
self.copy("LICENSE", dst="licenses", src=self._source_subfolder)
self.copy("*.h", dst="include", src=os.path.join(self._source_subfolder, "include"))
self.copy("*.hpp", dst="include", src=os.path.join(self._source_subfolder, "include"))
self.copy("*.lib", dst="lib", keep_path=False)
self.copy("*.dll", dst="bin", keep_path=False)
self.copy("*.so", dst="lib", keep_path=False)
self.copy("*.so.*", dst="lib", keep_path=False)
self.copy("*.dylib", dst="lib", keep_path=False)
self.copy("*.a", dst="lib", keep_path=False)
β install-. , β . , , :
β , , install'.
package_info
, : , , , . . , , . :
def package_info(self):
self.cpp_info.libs = ["jinja2cpp"]
. define' , .
The sergeant calls (stand up and fight!)
β . . . , ( PR): . , :
> conan create . jinja2cpp/1.1.0@
( jinja2cpp/1.1.0 β )
, . conan- . . . , , . β¦ .
, ( ) . Windows-, Linux-. Windows β shared
. Linuxβ¦ Linux β . - -, conan . : https://hub.docker.com/u/conanio GitHub Actions.
:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=Visual Studio
compiler.runtime=MD
compiler.version=15
os=Windows
os_build=Windows
[options]
jinja2cpp:shared=False
[env]
[build_requires]
. :
> conan create . jinja2cpp/1.1.0@ -p profile_md.txt
profile_md.txt
β .
: ( β , , ) . , , . , pull request' conan-center-index . , , , . β conan'. , , Visual Studio . , , .
You'll be the hero of the neighbourhood
, conan-center-index , , , , , . , , C++ . conan β , , . , , , . , β .
:
conan-center-index
Issue EAP
Jinja2C++
conan-center
Dalam teks artikel, baris dari lagu βYou in the army nowβ oleh Status Quo digunakan sebagai subtitle