如何使用MSVSSolution和MSVSProject进行相关联

时间:2017-01-13 15:05:53

标签: scons

我的目标是为我所有SConscript创建的所有vcxproject创建一个sln文件。

我的SConstruct负责在项目的根目录下创建sln文件:

vcxprojList = [] 
for script in getSConscript(): 
    #SConscript imports and appends vcxproject in vcxprojList 
    SConscript(str(script).strip(), exports='envService vcxprojList', variant_dir=myVariantDir, duplicate=0) 

Alias('msvs', env.MSVSSolution(target = 'faa_mxA' + env['MSVSSOLUTIONSUFFIX'], 
                                          projects = vcxprojList, 
                                          variant = 'Debug')) 

我的SConscript创建了2个vcxproject,参见:

prj1 = env.MSVSProject(target = env.libName() + env['MSVSPROJECTSUFFIX'],
                                     srcs = sourcesLib,
                                     incs = [''],
                                     localincs = headerFiles,
                                     resources = [''],
                                     misc = [''],
                                     buildtarget = lib,
                                     variant = 'Debug',
                                     auto_build_solution=0)


prj2 = Default(Alias('msvs',env.MSVSProject(target = 'FlatGuiSpeechController' + env['MSVSPROJECTSUFFIX'],
                                     srcs = ['main.cpp'],
                                     incs = [''],
                                     localincs = [''],
                                     resources = ['main.rc'],
                                     misc = [''],
                                     buildtarget = program,
                                     variant = 'Debug',
                                     auto_build_solution=0)))


print 'prj1 : ' + str(prj1)
print 'prj2 : ' + str(prj2)

Default(Alias('msvc', prj1))

vcxprojList.append(prj1[0])
vcxprojList.append(prj2)

我几乎感到高兴,但sln文件不正确,他尝试使用变量目录中的vcxproject,它应该使用src目录中的那些:

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsr_sra_src_flatGui-debug.vcxproj", "build\debug\sr\sra\src\flatGui\libsr_sra_src_flatGui-debug.vcxproj", "{D4E37B2A-A33C-E0A6-3776-346AC39668E2}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "None", "None", "{6ADF97F8-3ACF-6453-D4A6-A4B1070F3754}"
EndProject
.
.
.

1 - 我仍然感到困惑,为什么真正的vcxprojects位于src目录中,并且在变量目录中有虚拟vcxprojects。 sln文件尝试使用虚拟vcxproject,这是不正确的。是因为MSVSProject不能与变量目录一起使用吗?

2 - 我有另一个问题。默认和别名机制无法按预期使用MSVSProject。我想用'msvs'目标执行MSVSProject。我上面的SConscript生成输出:

prj1 : ['libsr_sra_src_flatGui-debug.vcxproj', 'libsr_sra_src_flatGui-debug.vcxproj.filters'] 
prj2 : None 
scons: done reading SConscript files. 
scons: Building targets ... 
_GenerateV10DSP.Parse() 
Adding 'FlatGuiSpeechController - Debug|Win32' to 'sr\sra\src\flatGui\FlatGuiSpeechController.vcxproj' 

prj2 = Default(Alias...)返回空目标,而Default(Alias('msvc', prj1))未执行!

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

如果有人有同样的问题,我会发布我找到的解决方案:

1 - 第一个问题是MSVSProjectvariant dirsrc dir生成项目文件。我在SConsctruct

中执行了以下解决方法来解决问题
vcxprojList = [] 
for script in getSConscript(): 
    if 'msvs' in COMMAND_LINE_TARGETS: 
        SConscript(str(script).strip(), exports='envService vcxprojList', duplicate=0) 
    else: 
        variantDir =  os.path.join(envService.get_envWin32()['VARIANTDIRROOT'], envService.get_envWin32()['BUILDMODE'], os.path.dirname(script)[2:]) 
        SConscript(str(script).strip(), exports='envService vcxprojList', variant_dir=variantDir, duplicate=0) 

Alias('msvs', envService.get_envWin32().MSVSSolution(target = 'faa_mxA' + envService.get_envWin32()['MSVSSOLUTIONSUFFIX'], 
                                                     projects = vcxprojList, 
                                                     variant = 'Debug')) 

如果键入scons msvc,SConscript没有给出变量目录,则msvs项目文件仅生成src目录。

2 - 我的另一个问题是误导DefaultAlias。我意识到,在按照我想要的方式输入scons msvs时,Alias就足够了。我在SConscript

中做了类似的事情

创建库

tgt = env.buildLibrary(env.libName(),Glob('*。cpp'))

################################  Visual Studio ####################################
if 'msvs' in COMMAND_LINE_TARGETS:
        prj1 = env.MSVSProject(target = env.libName() + env['MSVSPROJECTSUFFIX'],
                               srcs = env.getBaseName(Glob('*.cpp')),
                               incs = [''],
                               localincs = env.getBaseName(Glob('*.h')),
                               resources = [''],
                               misc = [''],
                               buildtarget = tgt,
                               variant = 'Debug',
                               auto_build_solution=0)

        env.Alias('msvs', prj1)
        vcxprojList.append(prj1[0])

etvoilà