I have been trying to build Conan packages of my project for a week. I have been reading the documentation but there are many points that I'm still confused about.
There are 4 files that I think are very important:
What is the purpose of each file? Where should each file be located? Which ones are interchangeable?
I have the following conanfile.py
that generates the Conan package:
from conans import ConanFile, CMake
class mylibConan(ConanFile):
name = "mylib"
version = "1.16.0"
generators = "cmake"
settings = "os", "arch", "compiler", "build_type"
options = {"shared": [True, False]}
default_options = "shared=False"
exports_sources = ["*"]
url = ""
license = ""
description = "The mylib HAL library."
def configure(self):
self.options.shared = False
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def package(self):
libs_build_dir = "lib_mylib/" + str(self.settings.build_type)
api_dir = "modules/mylib/lib/api/"
self.copy(pattern="lib_mylib.lib", dst="lib", src=libs_build_dir)
self.copy(pattern="*", dst="include", src=api_dir)
def package_info(self):
self.cpp_info.includedirs = ['include']
self.cpp_info.libdirs = ['lib']
self.cpp_info.libs = ['mylib']
...and the following conanfile.txt
in my main project that consumes the Conan package:
[requires]
mylib/1.16.0@demo/testing
[generators]
cmake
visual_studio_multi
I need to define the cl
version to be 14.24.28314
so it doesn't conflict with the consuming project.
Where should I define the cl
version?
The files are:
conanfile.py
is a Conan "recipe". It declares dependencies, how to build a package from sources. The same recipe can be used to manage different configurations, like different platforms, compilers, build types, etcconanfile.txt
is a text simplification of conanfile.py
, that can be used exclusively to consume dependencies, but not to create packages. conanfile.py
can be used both to consume dependencies and to create packagesprofile
file is a text file containing configuration values like os=Windows
and compiler=gcc
. You can pass these values in the command line, but it is better to have them in files, easier to manage and more convenient.settings.yml
is a declaration of what values can the settings
take. To validate the inputs and make sure there are no typos, and use a common set of configurations so people can collaborate together.I suggest following the tutorials in the docs, like https://docs.conan.io/en/latest/getting_started.html, or if you are into video-format, this free training is good: https://academy.jfrog.com/path/conan
Regarding the versions, you need to use those defined in the settings, for Visual Studio
you need to use 14
, 15
, etc. The new msvc
compiler setting, experimental, will be using the compiler version, like 19.xx
. In general, it is not needed to specify the compiler version down to the patch, because this is mostly for the binary model, and it is typically not needed to go to that level. If you want to learn how to customize the settings value, read this section