diff --git a/examples/wscript b/examples/wscript
index e6badbf..6cb8dd2 100644
--- a/examples/wscript
+++ b/examples/wscript
@@ -6,8 +6,8 @@
     # List all .cpp files (whole example in one .cpp)
     for ex in bld.path.ant_glob('*.cpp'):
         name = ex.change_ext('').path_from(bld.path.get_bld())
-        bld.program(name='example-%s' % name,
-                    target='nac-%s' % name,
+        bld.program(name=f'example-{name}',
+                    target=f'nac-{name}',
                     source=[ex],
                     use='libndn-nac',
                     install_path=None)
@@ -15,7 +15,7 @@
     # List all directories (example can have multiple .cpp in the directory)
     for subdir in bld.path.ant_glob('*', dir=True, src=False):
         name = subdir.path_from(bld.path)
-        bld.program(name='example-%s' % name,
+        bld.program(name=f'example-{name}',
                     target=name,
                     source=subdir.ant_glob('**/*.cpp'),
                     use='libndn-nac',
diff --git a/tests/wscript b/tests/wscript
index 9532f78..42d537d 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -4,8 +4,8 @@
 
 def build(bld):
     bld.program(
-        target='../unit-tests',
+        target=f'{top}/unit-tests',
         name='unit-tests',
         source=bld.path.ant_glob('**/*.cpp'),
-        use='libndn-nac',
+        use='BOOST_TESTS libndn-nac',
         install_path=None)
diff --git a/tools/wscript b/tools/wscript
index 07de0e9..337bc7f 100644
--- a/tools/wscript
+++ b/tools/wscript
@@ -4,41 +4,47 @@
 
 def build(bld):
     # Single object tools:
-    # tools/example-tool.cpp is a self-contained tool with a main() function
-    # and is built as build/bin/example-tool.
-    # These tools cannot be unit-tested.
+    # tools/foo.cpp is a self-contained tool with a main() function
+    # and is built as build/bin/foo. These tools cannot be unit-tested.
     for tool in bld.path.ant_glob('*.cpp'):
         name = tool.change_ext('').path_from(bld.path.get_bld())
         bld.program(name=name,
-                    target='../bin/%s' % name,
+                    target=f'{top}/bin/{name}',
                     source=[tool],
-                    use='NDN_CXX libndn-nac')
+                    use='BOOST_TOOLS libndn-nac')
 
     # Sub-directory tools:
-    # tools/example-tool/**/*.cpp is compiled and linked into build/bin/example-tool.
-    # tools/example-tool/main.cpp must exist and must contain the main() function.
+    # tools/foo/**/*.cpp are compiled and linked into build/bin/foo.
+    # tools/foo/main.cpp must exist and must contain the main() function.
     # All other objects are collected into 'tools-objects' and can be unit-tested.
     testableObjects = []
     for subdir in bld.path.ant_glob('*', dir=True, src=False):
+        name = subdir.path_from(bld.path)
+        subWscript = subdir.find_node('wscript')
+        if subWscript:
+            # if the subdir has a wscript, delegate to it
+            bld.recurse(name)
+            continue
+
         mainFile = subdir.find_node('main.cpp')
         if mainFile is None:
-            continue # not a C++ tool
+            # not a C++ tool, skip the subdir
+            continue
 
-        name = subdir.path_from(bld.path)
         srcFiles = subdir.ant_glob('**/*.cpp', excl=['main.cpp'])
         srcObjects = ''
         if srcFiles:
-            srcObjects = 'tools-%s-objects' % name
+            srcObjects = f'tools-{name}-objects'
             bld.objects(target=srcObjects,
                         source=srcFiles,
-                        use='NDN_CXX libndn-nac',
+                        use='libndn-nac',
                         includes=name)
             testableObjects.append(srcObjects)
 
         bld.program(name=name,
-                    target='../bin/%s' % name,
+                    target=f'{top}/bin/{name}',
                     source=[mainFile],
-                    use='NDN_CXX libndn-nac ' + srcObjects,
+                    use=f'BOOST_TOOLS libndn-nac {srcObjects}',
                     includes=name)
 
     bld.objects(target='tools-objects',
diff --git a/wscript b/wscript
index d4264d4..833277c 100644
--- a/wscript
+++ b/wscript
@@ -43,11 +43,13 @@
     conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.8.1', '--cflags', '--libs'],
                    uselib_store='NDN_CXX', pkg_config_path=pkg_config_path)
 
-    boost_libs = ['system', 'program_options']
-    if conf.env.WITH_TESTS:
-        boost_libs.append('unit_test_framework')
+    conf.check_boost()
 
-    conf.check_boost(lib=boost_libs, mt=True)
+    if conf.env.WITH_TESTS:
+        conf.check_boost(lib='unit_test_framework', mt=True, uselib_store='BOOST_TESTS')
+
+    if conf.env.WITH_TOOLS:
+        conf.check_boost(lib='program_options', mt=True, uselib_store='BOOST_TOOLS')
 
     conf.check_compiler_flags()
 
