scons_logo 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!