[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