What does it for ?
ConanEx is using conan
as underlying tool.
ConanEx is a command line wrapper around conan
with additional features.
Consider the following workflow:
wget https://github.com/google/flatbuffers/archive/refs/tags/v22.10.26.zip
unzip v22.10.26.zip -d flatbuffers_22_10_26
conan create flatbuffers/22.10.26 flatbuffers_22_10_26/
conan create ctre/3.6 ../../../../compile-time-regular-expressions
Such workflow has a following drawbacks:
- Not all dependencies are specified in
conanfile.txt
- It adds a boilerplate commands to execute each time when environment should be deployed
Lets also describe conancenter
drawbacks:
- Centralized repository (do not allow decentralized behaviour)
- Hard to add
conanfile.py
receipt toconan-center-index
. It takes too long to pass review with all unwrittenconan-center-index
rules forconanfile.py
Lets also describe a current conanfile.txt
drawbacks:
conanfile.txt
does not allow specifying dependencies to other package sources likegit
, remotezip
archive and etc. It makes it less decentralized as claimed
Let's consider what ConanEx brings to conanfile.txt
syntax.
Consider the following conanfile.txt
:
[requires]
poco/1.9.4
flatbuffers/22.10.26 {
zip = 'https://github.com/google/flatbuffers/archive/refs/tags/v22.10.26.zip',
sha256 = 'B97C7C017B05F20B17939FEBD413C75201F5B704C8DE49ADB0B35A70D50478CD'
}
ctre/3.6 { remote = "conancenter" }
# Examples:
# flatbuffers/2.0.0 {
# git = https://github.com/google/flatbuffers,
# tag = v2.0.0
# }
# flatbuffers/2.0.0 { zip = "https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.tar.gz" }
# flatbuffers/2.0.0 { conan = "https://raw.githubusercontent.com/google/flatbuffers/master/conanfile.py" }
# CTRE/3.6 { git = "https://github.com/hanickadot/compile-time-regular-expressions" }
# CTRE/3.6 { path = "../../../../compile-time-regular-expressions" }
[options]
flatbuffers/*:shared=True
poco/*:shared=True
As you can see in this file we have 5 additional ways to install package
Lets describe them:
git
allow to download package using Git and runconanfile.py
located in root directoryzip
(url/file_path) allow installing package from archive, unpack it and run conanfile.py located in root directory. There are the following formats that supported: zip, tar.gz, tar.bz2conan
(url/file_path) if you receipt is completely independent, then you could specify url/path to it to create package. Independent means that receipt could download source files by itself.path
allow to install package from folderremote
specify separate remote for this particular package
url/file_path supports the hash calculation with options: md5
, sha256
and sha512
To install conanex
:
python3 -m pip install conanex
To use conanex
use it the same way you use conan
:
conanex install <path_to_conanfile.txt> -pr=<path_to_profile>
If you are using cmake-conan
:
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/0.18.1/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake"
TLS_VERIFY ON)
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)
set(CONAN_COMMAND conanex)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE ${CMAKE_CURRENT_LIST_DIR}
BUILD missing
REMOTE conancenter
SETTINGS ${settings})
Only thing you need is to specify set(CONAN_COMMAND conanex)
before any conan command