Implicit list of all build jobs in SCONS?

I have a scons project that includes several header files as a compiler flag.

# Forced include files passed directly to the compiler
env.Append(CCFLAGS = ['/FIinclude.h'])

These files are not included by any files in the project. I need to add an explicit dependency for them.

forced_include_headers = ['include.h']

# Trying to add an explicit dependency for each build target
for object in BUILD_TARGETS:
  env.Depends(object, forced_include_headers)

The problem I ran into is that the list is BUILD_TARGETSempty. It seems that it contains only those things that were transferred from COMMAND_LINE_TARGETSor DEFAULT_TARGETS. All goals in our project are built implicitly. We do not use env.Default, etc. Is there a way to get an implicit target list, or do I need to manually create it? I noticed that it is TARGETSreserved and does not seem to contain what I want.

I can add env.Depends(target, forced_include_headers)for all purposes in my respective SConscript files, but the project is quite large.

+3
1

, ( , , - ), Object :

# Typical SConstruct / SConscript
env = Environment()
env.Program('foo.c')
lib = env.SharedLibrary('bar.c')
env.Program('foo2.c', LIBS=[lib])
SConscript('subdir/SConscript', exports={'env':env})

# Get a list of all Object targets
def get_all_targets(env, node='.'):
    def get_all_targets_iter(env, node):
        if node.has_builder() and node.get_builder().get_name(env) in ('Object', 'SharedObject'):
            yield node
        for kid in node.all_children():
            for kid in get_all_targets(env, kid):
                yield kid
    node = env.arg2nodes(node, env.fs.Entry)[0]
    return list(get_all_targets_iter(env, node))

# Force them all to depend upon some header
env.Depends(get_all_targets(env), 'site_wide.h')
0

Source: https://habr.com/ru/post/1761377/


All Articles