SCons
SCons can be used both to generate and consume Conan packages via the scons
generator. The package recipe build()
method could be similar to:
class PkgConan(ConanFile):
settings = 'os', 'compiler', 'build_type', 'arch'
requires = 'hello/1.0@user/stable'
generators = "scons"
...
def build(self):
debug_opts = ['--debug-build'] if self.settings.build_type == 'Debug' else []
os.makedirs("build")
# FIXME: Compiler, version, arch are hardcoded, not parametrized
with tools.chdir("build"):
self.run(['scons', '-C', '{}/src'.format(self.source_folder)] + debug_opts)
...
The SConscript
build script can load the generated SConscript_conan
file that contains the
information of the dependencies, and use it to build
conan = SConscript('{}/SConscript_conan'.format(build_path_relative_to_sconstruct))
if not conan:
print("File `SConscript_conan` is missing.")
print("It should be generated by running `conan install`.")
sys.exit(1)
flags = conan["conan"]
version = flags.pop("VERSION")
env.MergeFlags(flags)
env.Library("hello", "hello.cpp")
A complete example with a test_package that uses SCons too is available in the following GitHub repository. Give it a try!
$ git clone https://github.com/memsharded/conan-scons-template
$ cd conan-scons-template
$ conan create . demo/testing
> Hello World Release!
$ conan create . demo/testing -s build_type=Debug
> Hello World Debug!