Как правильно использовать MSVSSolution и MSVSProject

Моя цель состоит в том, чтобы иметь один sln-файл для всех vcxproject, созданных all my SConscript.

My 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')) 

My 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 из variant dir, когда он должен использовать те, в src dir :

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsr_sra_src_flatGui-debug.vcxproj", "builddebugsrsrasrcflatGuilibsr_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 dir, а в variant dir есть фиктивные vcxprojects. sln пытается использовать фиктивный vcxproject, что является неправильным. Это потому, что MSVSProject не может использоваться с variant dir?

2-у меня другая проблема. Механизм по умолчанию и псевдонимов не работает должным образом с MSVSProject. Я хочу, чтобы MSVSProject был выполнен с целью «msvs». Мой 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 'srsrasrcflatGuiFlatGuiSpeechController.vcxproj' 

prj2 = Default(Alias...) возвращает пустую цель в то время Default(Alias('msvc', prj1))как не выполняется!

Что я здесь делаю не так?

1 ответ

  1. В случае, если у кого-то есть те же вопросы, что и у меня, я опубликую решение, которое я нашел :

    1-первой проблемой было MSVSProjectсоздание файла проекта в обоих variant dirи src 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 не будет присвоен variant dir, то файл проекта msvs будет создан только src dir.

    2-моей другой проблемой было неправильное использование DefaultИ.Alias Я понял, что когда печатаю 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])
    

    et voilà