Finish 3rd example
This commit is contained in:
124
execEx/01/SConstruct
Normal file
124
execEx/01/SConstruct
Normal file
@@ -0,0 +1,124 @@
|
||||
|
||||
Help("""
|
||||
|
||||
This is the first scons example. In this example we see a very simple way
|
||||
of calling scons to create an executable
|
||||
|
||||
>> ls
|
||||
main.cpp SConstruct
|
||||
|
||||
>> scons -h (get this help message)
|
||||
>> scons -H (get scons command help)
|
||||
usage: scons [OPTION] [TARGET] ...
|
||||
|
||||
SCons Options:
|
||||
-b, -d, -e, -m, -S, -t, -w, --environment-overrides, --no-keep-going,
|
||||
--no-print-directory, --print-directory, --stop, --touch
|
||||
Ignored for compatibility.
|
||||
-c, --clean, --remove Remove specified targets and dependencies.
|
||||
-C DIR, --directory=DIR Change to DIR before doing anything.
|
||||
--cache-debug=FILE Print CacheDir debug info to FILE.
|
||||
--cache-disable, --no-cache
|
||||
Do not retrieve built targets from CacheDir.
|
||||
--cache-force, --cache-populate
|
||||
Copy already-built targets into the CacheDir.
|
||||
--cache-readonly Do not update CacheDir with built targets.
|
||||
--cache-show Print build actions for files from CacheDir.
|
||||
--config=MODE Controls Configure subsystem: auto, force,
|
||||
cache.
|
||||
-D Search up directory tree for SConstruct,
|
||||
build all Default() targets.
|
||||
--debug=TYPE Print various types of debugging information:
|
||||
count, duplicate, explain, findlibs, includes,
|
||||
memoizer, memory, objects, pdb, prepare,
|
||||
presub, stacktrace, time.
|
||||
--diskcheck=TYPE Enable specific on-disk checks.
|
||||
--duplicate=DUPLICATE Set the preferred duplication methods. Must be
|
||||
one of hard-soft-copy, soft-hard-copy,
|
||||
hard-copy, soft-copy, copy
|
||||
-f FILE, --file=FILE, --makefile=FILE, --sconstruct=FILE
|
||||
Read FILE as the top-level SConstruct file.
|
||||
-h, --help Print defined help message, or this one.
|
||||
-H, --help-options Print this message and exit.
|
||||
-i, --ignore-errors Ignore errors from build actions.
|
||||
-I DIR, --include-dir=DIR Search DIR for imported Python modules.
|
||||
--implicit-cache Cache implicit dependencies
|
||||
--implicit-deps-changed Ignore cached implicit dependencies.
|
||||
--implicit-deps-unchanged Ignore changes in implicit dependencies.
|
||||
--interact, --interactive Run in interactive mode.
|
||||
-j N, --jobs=N Allow N jobs at once.
|
||||
-k, --keep-going Keep going when a target can't be made.
|
||||
--max-drift=N Set maximum system clock drift to N seconds.
|
||||
--md5-chunksize=N Set chunk-size for MD5 signature computation to
|
||||
N kilobytes.
|
||||
-n, --no-exec, --just-print, --dry-run, --recon
|
||||
Don't build; just print commands.
|
||||
--no-site-dir Don't search or use the usual site_scons dir.
|
||||
--profile=FILE Profile SCons and put results in FILE.
|
||||
-q, --question Don't build; exit status says if up to date.
|
||||
-Q Suppress "Reading/Building" progress messages.
|
||||
--random Build dependencies in random order.
|
||||
-s, --silent, --quiet Don't print commands.
|
||||
--site-dir=DIR Use DIR instead of the usual site_scons dir.
|
||||
--stack-size=N Set the stack size of the threads used to run
|
||||
jobs to N kilobytes.
|
||||
--taskmastertrace=FILE Trace Node evaluation to FILE.
|
||||
--tree=OPTIONS Print a dependency tree in various formats: all,
|
||||
derived, prune, status.
|
||||
-u, --up, --search-up Search up directory tree for SConstruct,
|
||||
build targets at or below current directory.
|
||||
-U Search up directory tree for SConstruct,
|
||||
build Default() targets from local SConscript.
|
||||
-v, --version Print the SCons version number and exit.
|
||||
--warn=WARNING-SPEC, --warning=WARNING-SPEC
|
||||
Enable or disable warnings.
|
||||
-Y REPOSITORY, --repository=REPOSITORY, --srcdir=REPOSITORY
|
||||
Search REPOSITORY for source and target files.
|
||||
|
||||
>> scons
|
||||
scons: Reading SConscript files ...
|
||||
scons: done reading SConscript files.
|
||||
scons: Building targets ...
|
||||
g++ -o main.o -c main.cpp
|
||||
g++ -o helloworld main.o
|
||||
scons: done building targets.
|
||||
|
||||
|
||||
>> scons
|
||||
scons: Reading SConscript files ...
|
||||
scons: done reading SConscript files.
|
||||
scons: Building targets ...
|
||||
scons: `.' is up to date.
|
||||
scons: done building targets.
|
||||
|
||||
|
||||
>> ls -a
|
||||
total 32
|
||||
drwxr-xr-x 2 brgirgis users 96 Sep 26 22:50 ./
|
||||
drwxr-xr-x 5 brgirgis users 36 Sep 26 22:44 ../
|
||||
-rwxr-xr-x 1 brgirgis users 13176 Sep 26 22:50 helloworld*
|
||||
-rw-r--r-- 1 brgirgis users 94 Sep 26 22:20 main.cpp
|
||||
-rw-r--r-- 1 brgirgis users 2728 Sep 26 22:50 main.o
|
||||
-rw-r--r-- 1 brgirgis users 1749 Sep 26 22:50 .sconsign.dblite
|
||||
-rw-r--r-- 1 brgirgis users 400 Sep 26 22:50 SConstruct
|
||||
|
||||
>> scons -c
|
||||
scons: Reading SConscript files ...
|
||||
scons: done reading SConscript files.
|
||||
scons: Cleaning targets ...
|
||||
Removed main.o
|
||||
Removed helloworld
|
||||
scons: done cleaning targets.
|
||||
|
||||
|
||||
>> ls -a
|
||||
total 12
|
||||
drwxr-xr-x 2 brgirgis users 64 Sep 26 22:53 ./
|
||||
drwxr-xr-x 5 brgirgis users 36 Sep 26 22:44 ../
|
||||
-rw-r--r-- 1 brgirgis users 94 Sep 26 22:20 main.cpp
|
||||
-rw-r--r-- 1 brgirgis users 1759 Sep 26 22:51 .sconsign.dblite
|
||||
-rw-r--r-- 1 brgirgis users 1178 Sep 26 22:54 SConstruct
|
||||
|
||||
""")
|
||||
|
||||
Program('helloworld', 'main.cpp')
|
||||
10
execEx/01/main.cpp
Normal file
10
execEx/01/main.cpp
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
std::cout << "Hello World!" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
73
execEx/02/SConstruct
Normal file
73
execEx/02/SConstruct
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
Help("""
|
||||
|
||||
This is the second scons example. In this example we explore more options in
|
||||
scons. Once you start doing anything useful with scons other than showing
|
||||
how simple scons works, you will have to create an environment to have more
|
||||
control on the build.
|
||||
|
||||
One can "Dump()" the environment to see all the underlying details. We can
|
||||
also compare between Linux and windows environments.
|
||||
|
||||
>> ls
|
||||
foo.cpp foo.hpp main.cpp SConstruct
|
||||
|
||||
>> scons
|
||||
scons: Reading SConscript files ...
|
||||
------------------>starting
|
||||
------------------>ending
|
||||
scons: done reading SConscript files.
|
||||
scons: Building targets ...
|
||||
g++ -o foo.o -c foo.cpp
|
||||
g++ -o main.o -c main.cpp
|
||||
g++ -o helloworld main.o foo.o
|
||||
scons: done building targets.
|
||||
|
||||
|
||||
>> ls -a
|
||||
total 68
|
||||
drwxr-xr-x 2 brgirgis users 154 Sep 26 23:04 ./
|
||||
drwxr-xr-x 5 brgirgis users 36 Sep 26 22:44 ../
|
||||
-rw-r--r-- 1 brgirgis users 21096 Sep 26 23:04 env.txt
|
||||
-rw-r--r-- 1 brgirgis users 48 Sep 26 22:42 foo.cpp
|
||||
-rw-r--r-- 1 brgirgis users 109 Sep 26 22:40 foo.hpp
|
||||
-rw-r--r-- 1 brgirgis users 1256 Sep 26 23:03 foo.o
|
||||
-rwxr-xr-x 1 brgirgis users 13288 Sep 26 23:03 helloworld*
|
||||
-rw-r--r-- 1 brgirgis users 117 Sep 26 22:41 main.cpp
|
||||
-rw-r--r-- 1 brgirgis users 2872 Sep 26 23:03 main.o
|
||||
-rw-r--r-- 1 brgirgis users 2441 Sep 26 23:04 .sconsign.dblite
|
||||
-rw-r--r-- 1 brgirgis users 1348 Sep 26 23:04 SConstruct
|
||||
|
||||
|
||||
>> scons --tree=all helloworld
|
||||
scons: Reading SConscript files ...
|
||||
------------------>starting
|
||||
------------------>ending
|
||||
scons: done reading SConscript files.
|
||||
scons: Building targets ...
|
||||
scons: `helloworld' is up to date.
|
||||
+-helloworld
|
||||
+-main.o
|
||||
| +-main.cpp
|
||||
| +-foo.hpp
|
||||
| +-/usr/bin/g++
|
||||
+-foo.o
|
||||
| +-foo.cpp
|
||||
| +-foo.hpp
|
||||
| +-/usr/bin/g++
|
||||
+-/usr/bin/g++
|
||||
scons: done building targets.
|
||||
|
||||
|
||||
""")
|
||||
|
||||
print('------------------>starting')
|
||||
env = Environment()
|
||||
|
||||
open('env.txt', 'w').write(env.Dump())
|
||||
|
||||
env.Program(target='helloworld',
|
||||
source=['main.cpp', 'foo.cpp'])
|
||||
|
||||
print('------------------>ending')
|
||||
|
||||
8
execEx/02/foo.cpp
Normal file
8
execEx/02/foo.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
#include "foo.hpp"
|
||||
|
||||
int
|
||||
foo()
|
||||
{
|
||||
return 32;
|
||||
}
|
||||
6
execEx/02/foo.hpp
Normal file
6
execEx/02/foo.hpp
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef SRC_EXECEX_02_FOO_HPP_
|
||||
#define SRC_EXECEX_02_FOO_HPP_
|
||||
|
||||
int foo();
|
||||
|
||||
#endif // SRC_EXECEX_02_FOO_HPP_
|
||||
12
execEx/02/main.cpp
Normal file
12
execEx/02/main.cpp
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
#include "foo.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
std::cout << "foo = " << foo() << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
6
execEx/03/SConscript
Normal file
6
execEx/03/SConscript
Normal file
@@ -0,0 +1,6 @@
|
||||
Import('env')
|
||||
|
||||
prog = env.Program(target='helloworld',
|
||||
source=['main.cpp', 'foo.cpp'])
|
||||
|
||||
env.Install(env.installDir, prog)
|
||||
87
execEx/03/SConstruct
Normal file
87
execEx/03/SConstruct
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
import os
|
||||
|
||||
Help("""
|
||||
|
||||
This is the third scons example. In this example we see more things that we
|
||||
can do with scons. Namely: arguments, variant build directory, and install.
|
||||
|
||||
One can add the help for the expected build arguments using this help
|
||||
function call
|
||||
|
||||
DEBUG=1,0 - enable debug build, default 1
|
||||
ASSERT=1,0 - enable run time assertion, default 1 in DEBUG=1 and 0 otherwise
|
||||
COMPILER=compilerName - compiler name
|
||||
BUILDNAME=buildName - build name
|
||||
|
||||
""")
|
||||
|
||||
#
|
||||
# Processing arguments
|
||||
#
|
||||
debugArg = ARGUMENTS.get('DEBUG', '1')
|
||||
if debugArg not in ['0', '1']:
|
||||
raise RuntimeError('Check the DEBUG input argument.')
|
||||
|
||||
assertArg = '1' if debugArg == '1' else ARGUMENTS.get('ASSERT', '0')
|
||||
if assertArg not in ['0', '1']:
|
||||
raise RuntimeError('Check the ASSERT input argument.')
|
||||
|
||||
compilerName = ARGUMENTS.get('COMPILER', '')
|
||||
buildName = ARGUMENTS.get('BUILDNAME', 'default')
|
||||
|
||||
#
|
||||
# Initializing the environment
|
||||
#
|
||||
env = Environment(CC='clang',
|
||||
CXX='clang++')
|
||||
ccFlags = []
|
||||
linkFlags = []
|
||||
if compilerName == 'gcc':
|
||||
env.Replace(CC='gcc',
|
||||
CXX='g++')
|
||||
ccFlags = ["-std=c++1z", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", "-fpermissive"]
|
||||
if debugArg == '0':
|
||||
ccFlags += ["-O3"]
|
||||
linkFlags = ["-Wl,--export-dynamic"]
|
||||
else:
|
||||
ccFlags += ["-g", "-O0"]
|
||||
linkFlags = ["-g"]
|
||||
else:
|
||||
ccFlags = ["-std=c++1z", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", "-fpermissive"]
|
||||
if debugArg == '0':
|
||||
ccFlags += ["-O3"]
|
||||
linkFlags = ["-Wl,--export-dynamic"]
|
||||
else:
|
||||
ccFlags += ["-g", "-O0"]
|
||||
linkFlags = ["-g"]
|
||||
|
||||
env['CPPFLAGS'] = ccFlags
|
||||
env['LINKFLAGS'] = linkFlags
|
||||
|
||||
cppDefine = {}
|
||||
|
||||
if assertArg == '0':
|
||||
cppDefine['NDEBUG'] = None
|
||||
|
||||
env['CPPDEFINES'] = cppDefine
|
||||
|
||||
#
|
||||
# Paths setup
|
||||
#
|
||||
|
||||
env.srcDir = Dir('#').abspath
|
||||
|
||||
env.buildDir = os.path.join(env.srcDir, 'build', buildName)
|
||||
env.installDir = os.path.join(env.srcDir, 'install', buildName)
|
||||
|
||||
VariantDir(variant_dir=env.buildDir,
|
||||
src_dir=env.srcDir,
|
||||
duplicate=0)
|
||||
|
||||
#
|
||||
# Add build targets
|
||||
#
|
||||
|
||||
SConscript(os.path.join(env.buildDir, 'SConscript'),
|
||||
exports={'env' : env})
|
||||
8
execEx/03/foo.cpp
Normal file
8
execEx/03/foo.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
#include "foo.hpp"
|
||||
|
||||
int
|
||||
foo()
|
||||
{
|
||||
return 32;
|
||||
}
|
||||
6
execEx/03/foo.hpp
Normal file
6
execEx/03/foo.hpp
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef SRC_EXECEX_02_FOO_HPP_
|
||||
#define SRC_EXECEX_02_FOO_HPP_
|
||||
|
||||
int foo();
|
||||
|
||||
#endif // SRC_EXECEX_02_FOO_HPP_
|
||||
12
execEx/03/main.cpp
Normal file
12
execEx/03/main.cpp
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
#include "foo.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
std::cout << "foo = " << foo() << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user