如何正确使用MSVSSolution和MS Project
How to correclty use MSVSSolution and MSVSProject
我的目标是为所有 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 目录中,而在 variant 目录中有虚拟 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...)
returns 空目标,而 Default(Alias('msvc', prj1))
未执行!
我在这里做错了什么?
如果有人和我有同样的问题,我会 post 我找到的解决方案:
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的变量目录,那么,生成的msvs项目文件只有src目录。
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])
瞧瞧
我的目标是为所有 SConscript
.
我的 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 目录中,而在 variant 目录中有虚拟 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...)
returns 空目标,而 Default(Alias('msvc', prj1))
未执行!
我在这里做错了什么?
如果有人和我有同样的问题,我会 post 我找到的解决方案:
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的变量目录,那么,生成的msvs项目文件只有src目录。
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])
瞧瞧