scons_logo SCons

Warning

This is a deprecated feature. Please check the new SConsDeps tool that will be compatible with Conan 2.X.

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!