[Scons-users] SCons is only installing .lib part of SharedLibrary on Windows when target is specified
Bill Deegan
bill at baddogconsulting.com
Thu Jan 31 16:30:08 EST 2013
Dan,
On Thu, Jan 31, 2013 at 5:37 AM, Dan Pidcock <dan.pidcock at googlemail.com>wrote:
> I have a project that contains a SharedLibrary and a Program, and when I
> do a scons build with no target specified it works fine, but when I do a
> build with the program specified as the target after changing a source file
> in the library, it rebuilds the .lib and.dll but only installs the .lib
> (log output below). In fact I don't really want it to install the .lib
> anyway as that is just required for building.
>
> The source is structured as a library and an application directory with a
> SConscript in each and a SConstruct at the root. There is then a separate
> build directory and a bin directory where shared libraries and executables
> should be installed.
>
> The SConstruct basically sets compiler flags and then calls:
>
> projects=[ 'SampleLibrary', 'SampleApplication',]
>
> for project in projects:
>
> variant_dir = buildDir # D:\Build on windows
>
> for dir in string.split(project, '/'):
>
> variant_dir = os.path.join(variant_dir, dir)
>
> SConscript([project+'/SConscript', ], exports='env binDir buildType',
> variant_dir=variant_dir, duplicate=dupSrc)
> where dupSrc is switched off for Windows
>
> and the SConscripts look like:
>
> Import('*')
>
> projectName='SampleLibrary'
>
> projectEnv = env.Clone()
>
> project = projectEnv.SharedLibrary(projectName, Glob('*.cpp')) # or
> .Program
>
> Default(project )
>
> Default(projectEnv.Install(binDir, project))
>
It may be because on windows SharedLibrary() returns more than one node (
the .dll and the .lib usually).
Try:
for n in projectEnv.Install(binDir, project):
Default(n)
See if that resolves the issue.
If so, then I'd guess that Default() isn't handling more than a single node.
(which it should according to the docs..)
-Bill
>
> I suspect that it's something to do with the way I'm using Default() in
> the SConscripts but I tried several variations on this, including removing
> the Default and using env rather than the cloned env but couldn't get it to
> work.
>
> btw it works fine on Linux - the .so file is installed as expected.
>
> I've read through the 'Problems with env.Install()' thread in the hopes
> that it was the same issue but I don't think so as my SConstruct always
> specifies a variant_dir, and I also tried several Web searches and
> inspected the manual but couldn't find anything.
>
> Warning: largish logs below
>
> ========
>
> For each of these runs the start point is the same: a full build with no
> targets has been completed and then a source file in the library has been
> edited.
>
> Run 1: Just build SampleApplication using scons --debug=explain
> SampleApplication:
>
> scons: Reading SConscript files ...
>
> scons: done reading SConscript files.
>
> scons: Building targets ...
>
> scons: building associated VariantDir targets: D:\Build\SampleApplication
>
> scons: rebuilding `D:\Build\SampleLibrary\Test.obj' because
> `SampleLibrary\Test.cpp' changed
>
> cl /FoD:\Build\SampleLibrary\Test.obj /c SampleLibrary\Test.cpp /TP
> /nologo /EHsc /MDd /FC /DWIN32 /DWIN32_LEAN_AND_MEAN /D_DEBUG /I.
>
> scons: rebuilding `D:\Build\SampleLibrary\SampleLibrary.dll' because
> `D:\Build\SampleLibrary\Test.obj' changed
>
> link /nologo /DEBUG /dll /out:D:\Build\SampleLibrary\SampleLibrary.dll
> /implib:D:\Build\SampleLibrary\SampleLibrary.lib /LIBPATH:D:\Bin
> D:\Build\SampleLibrary\Test.obj D:\Build\SampleLibrary\stdafx.obj
>
> LINK : D:\Build\SampleLibrary\SampleLibrary.dll not found or not built by
> the last incremental link; performing full link
>
> Creating library D:\Build\SampleLibrary\SampleLibrary.lib and object
> D:\Build\SampleLibrary\SampleLibrary.exp
>
> scons: rebuilding `D:\Bin\SampleLibrary.lib' because
> `D:\Build\SampleLibrary\SampleLibrary.lib' changed
>
> Install file: "D:\Build\SampleLibrary\SampleLibrary.lib" as
> "D:\Bin\SampleLibrary.lib"
>
> scons: rebuilding `D:\Build\SampleApplication\SampleApplication.exe'
> because `D:\Bin\SampleLibrary.lib' changed
>
> link /nologo /DEBUG /OUT:D:\Build\SampleApplication\SampleApplication.exe
> /LIBPATH:D:\Bin SampleLibrary.lib D:\Build\SampleApplication\main.obj
> D:\Build\SampleApplication\stdafx.obj
>
> LINK : D:\Build\SampleApplication\SampleApplication.exe not found or not
> built by the last incremental link; performing full link
>
> Creating library D:\Build\SampleApplication\SampleApplication.lib and
> object D:\Build\SampleApplication\SampleApplication.exp
>
> scons: `SampleApplication' is up to date.
>
> scons: done building targets.
>
> Note that SampleLibrary.lib and .dll have both been built but
> SampleLibrary.dll was not installed.
>
> Run 2: full build using scons
>
> scons: Reading SConscript files ...
>
> scons: done reading SConscript files.
>
> scons: Building targets ...
>
> scons: rebuilding `D:\Build\SampleLibrary\Test.obj' because
> `SampleLibrary\Test.cpp' changed
>
> cl /FoD:\Build\SampleLibrary\Test.obj /c SampleLibrary\Test.cpp /TP
> /nologo /EHsc /MDd /FC /DWIN32 /DWIN32_LEAN_AND_MEAN /D_DEBUG /I.
>
> scons: rebuilding `D:\Build\SampleLibrary\SampleLibrary.dll' because
> `D:\Build\SampleLibrary\Test.obj' changed
>
> link /nologo /DEBUG /dll /out:D:\Build\SampleLibrary\SampleLibrary.dll
> /implib:D:\Build\SampleLibrary\SampleLibrary.lib /LIBPATH:D:\Bin
> D:\Build\SampleLibrary\Test.obj D:\Build\SampleLibrary\stdafx.obj
>
> LINK : D:\Build\SampleLibrary\SampleLibrary.dll not found or not built by
> the last incremental link; performing full link
>
> Creating library D:\Build\SampleLibrary\SampleLibrary.lib and object
> D:\Build\SampleLibrary\SampleLibrary.exp
>
> scons: rebuilding `D:\Bin\SampleLibrary.dll' because
> `D:\Build\SampleLibrary\SampleLibrary.dll' changed
>
> Install file: "D:\Build\SampleLibrary\SampleLibrary.dll" as
> "D:\Bin\SampleLibrary.dll"
>
> scons: rebuilding `D:\Bin\SampleLibrary.lib' because
> `D:\Build\SampleLibrary\SampleLibrary.lib' changed
>
> Install file: "D:\Build\SampleLibrary\SampleLibrary.lib" as
> "D:\Bin\SampleLibrary.lib"
>
> scons: rebuilding `D:\Bin\SampleLibrary.exp' because
> `D:\Build\SampleLibrary\SampleLibrary.exp' changed
>
> Install file: "D:\Build\SampleLibrary\SampleLibrary.exp" as
> "D:\Bin\SampleLibrary.exp"
>
> scons: rebuilding `D:\Build\SampleApplication\SampleApplication.exe'
> because `D:\Bin\SampleLibrary.lib' changed
>
> link /nologo /DEBUG /OUT:D:\Build\SampleApplication\SampleApplication.exe
> /LIBPATH:D:\Bin SampleLibrary.lib D:\Build\SampleApplication\main.obj
> D:\Build\SampleApplication\stdafx.obj
>
> LINK : D:\Build\SampleApplication\SampleApplication.exe not found or not
> built by the last incremental link; performing full link
>
> Creating library D:\Build\SampleApplication\SampleApplication.lib and
> object
>
> D:\Build\SampleApplication\SampleApplication.exp
>
> scons: rebuilding `D:\Bin\SampleApplication.exe' because
> `D:\Build\SampleApplication\SampleApplication.exe' changed
>
> Install file: "D:\Build\SampleApplication\SampleApplication.exe" as
> "D:\Bin\SampleApplication.exe"
>
> scons: done building targets.
>
> Note that this time, SampleLibrary.lib and .dll have both been built and
> installed
>
> I can attach a zip of the whole project if that helps and isn't against
> mlist etiquette?
>
> Thanks,
>
> Dan
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> http://four.pairlist.net/mailman/listinfo/scons-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://four.pairlist.net/pipermail/scons-users/attachments/20130131/c20acb14/attachment.htm>
More information about the Scons-users
mailing list