[Scons-users] SCon example for common build scenario

Andrew Featherstone andrew.featherstone at gmail.com
Fri Jun 13 19:21:56 EDT 2014


On 13/06/14 16:49, ronex chako wrote:
> I just started learning scon build tools But could not find any 
> example which could describe the basic build scenario as mentioned below:
> ||  module_1:                               |  module_2
>    |_ src|_ src
>      |_ a.cpp|_ c.cpp
>      |_ b.cpp|_ d.cpp
>    |_ include|_ include
>      |_ a.h|_ c.h
>      |_ b.h|_ d.h
>    |_ test
>      |_ test_1
>      |_ test_2|
> Here |module_1| depends on the library created from |module_2|I want 
> to implement SCon makefiles for different *release and debug build* 
> which can work for platforms like *Windows and Linux* and implement 
> the task as mentioned below:
>
> 1.
>     SCon should build sources in release(build/release) and
>     debug(build/debug) mode, For debug mode it must use appropriate
>     flags depending on the OS.
> 2.
>     Running scons inside |module_1| it should first search for
>     |libmodule_2.(a/so)| (can be either shared or static library which
>     needs to be decide from scon environment variable/flag), if not
>     present then build it (How this kind of dependencies cane be
>     implied in scons and resolved in an elegant way ?)
> 3.
>     If |libmodules_2| is found or in case if not found then after
>     building it, it should later build |module_2|.
> 4.
>     How can I add regression target in |module_1| to run all the test
>     cases ?
> 5.
>     Where can I place and implement Sconstruct and SConscript files
>     for above scenario.. i.e. Can it be done using some top level
>     SConstruct file and SConscript in |module_1| and |module_2| ?
> 6.
>     How can I specify the release and debug directories names based on
>     the tools used by scons ? i.e if it uses gcc version 4.2 then
>     |build_gcc_v_4.2| or |release_gcc_v_4.|.
>
>
> Kindly help me with some examples, or solution for the above 
> scenario... Thanks in advance.
> I heartily appreciate any pointers or help.
>
>
> Regards,
> Ronex
>
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> http://four.pairlist.net/mailman/listinfo/scons-users
Oops, here's a change to my earlier reply
-        include_dirs.append(Dir(os.path.join('include', entry)))
+        include_dirs.append(Dir(os.path.join(entry, 'include')))

New example output:

$ scons -Q
scons: building associated VariantDir targets: build/debug_gcc_v_4.8.2 
build/release_gcc_v_4.8.2
gcc -o build/release_gcc_v_4.8.2/module_1/src/foo.o -c -O2 
-Imodule_1/include module_1/src/foo.c
gcc -o build/debug_gcc_v_4.8.2/module_1/src/foo.o -c -g 
-Imodule_1/include module_1/src/foo.c
ar rc build/debug_gcc_v_4.8.2/libmodule_1.a 
build/debug_gcc_v_4.8.2/module_1/src/foo.o
ranlib build/debug_gcc_v_4.8.2/libmodule_1.a

and for completeness
$ ls module_1/*/
module_1/include/:
foo.h

module_1/src/:
foo.c

$ cat module_1/src/foo.c
#include <foo.h>

int foo_bar(void)
{
     int a = 1;
     return a;
}

Andrew
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://four.pairlist.net/pipermail/scons-users/attachments/20140614/2af891ba/attachment.html>


More information about the Scons-users mailing list