Search code examples
sconsbuild-system

Scons -u option doesn't work?


Seems -u doesn't work on for me ( I am using scons-2.3.6).

To simplify the context, you can imagine my project structure like,

+root
    +project
        - bar.vcxproj (generated vs project)
    -SConstruct
    -bar.c

Inside SConstruct, I have put code like:

env_base = Environment()
...
env_base.StaticLibrary(target = 'bar', source = ['bar.c'])
...

If I execute command "scons" in root folder, everything works perfectly.

But If I execute command "scons -u" in project folder, scons can find my SConstruct up in root folder, but no file get compiled.

BTW : The reason for me to execute "scons -u" in project folder is because I want to put the generated vsproj in projet folder and use BuildCommandLine to compile the project.

I guess I didn't use "-u" correctly, what will be the elegant solution for my situation?

1st edit:

As bdbaddog asked, I have put the SConstruct here:

def BuildConfig(env, config):
    env.Append(CCFLAGS = '/W 4')
    env.Append(CCFLAGS = '/WX')

    if config == "debug":
        env.Append(CCFLAGS = '/DEBUG')
        #env.Append(CCFLAGS = '-Zi /Fd${TARGET}.pdb')
        env.Append(CCFLAGS = '/Z7')
    elif config == "release":
        pass

env_base = Environment()
lib = env_base.StaticLibrary(target = 'bar', source = ['bar.c'])

opts=Variables()
opts.Add('target', 'Compile Target (debug/release).', "debug")
# there is more in my project....
opts.Update(env_base) # update environment

# here I want to use my own command to build the project, so it can support different build option that is defined by me.
env_base['MSVSBUILDCOM'] = "scons -u target=$(Configuration)"

target = env_base["target"]
BuildConfig(env_base, env_base['target'])

env_base.MSVSProject(target = "project\\bar" + env_base['MSVSPROJECTSUFFIX'],
            srcs = ["..\\bar.c"],
            incs = [],
            localincs = "",
            resources = "",
            misc = "",
            buildtarget = lib,
            variant = ['debug'],
            auto_build_solution=0)

Solution

  • SCons only builds files under the current directory by default.

    If you you wanted to only build files in a certain directory (for which there are rules that build the targets there), you can invoke SCons as follows:

    scons the_target_directory_I_want_to_build

    Though this may cause sources for targets in that directory to also be built.