Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MSVS: Erroneous solution file generation with MSVSSolution and variant_dir #4612

Closed
jcbrill opened this issue Oct 12, 2024 · 10 comments · Fixed by #4610
Closed

MSVS: Erroneous solution file generation with MSVSSolution and variant_dir #4612

jcbrill opened this issue Oct 12, 2024 · 10 comments · Fixed by #4610
Labels
MSVC Microsoft Visual C++ Support

Comments

@jcbrill
Copy link
Contributor

jcbrill commented Oct 12, 2024

When using MSVSSolution with a variant build directory, the actual solution file is generated in the build directory instead of the source directory.

The expected result is that a placeholder solution file is generated in the build directory and the actual solution file is generated in the source directory.

Test configuration:

  • Layout

    748 B Test-Folder
     62 B ├─ SConstruct
    686 B └─ src
    686 B    └─ SConscript
    
    1 directory, 2 files
    
  • SConstruct File

    SConscript('src/SConscript', variant_dir='Build', duplicate=0)
    
  • src\SConscript File

    project_base = 'Test'
    
    env=Environment(
        tools=['msvs'],
        MSVS_VERSION='14.3',
        HOST_ARCH='amd64',
    )
    
    testsrc = ['test1.cpp', 'test2.cpp']
    testincs = [r'sdk_dir\\sdk.h']
    testlocalincs = ['test.h']
    testresources = ['test.rc']
    testmisc = ['readme.txt']
    
    p1 = env.MSVSProject(
        target = project_base + '.vcxproj',
        srcs = testsrc,
        incs = testincs,
        localincs = testlocalincs,
        resources = testresources,
        misc = testmisc,
        buildtarget = project_base + '.exe',
        variant = 'Release',
        auto_build_solution = 0,
    )
    
    sln = env.MSVSSolution(
        target = project_base + '.sln',
        projects = [p1],
        variant = 'Release',
    )
    

Test results:

  • Output Layout

    8787 B Test-I1-P1S1NV-M
      62 B ├─ SConstruct
     938 B ├─ Build
     818 B │  ├─ Test.sln
     120 B │  └─ Test.vcxproj
    7787 B └─ src
     686 B    ├─ SConscript
    5387 B    ├─ Test.vcxproj
    1714 B    └─ Test.vcxproj.filters
    
    2 directories, 6 files
    
  • Build\Test.sln Fragment:

    Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test.vcxproj", "Test.vcxproj", "{813AB1DC-1B07-56AA-A473-DEA1E63B968A}"
    
  • Build\Test.vcxproj Fragment:

    This is just a placeholder file.
    The real project file is here:
    
  • src\Test.vcxproj Fragment:

    <PropertyGroup Label="Globals">
        <ProjectGuid>{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}</ProjectGuid>
    

Notes:

  • The actual solution file is generated in the Build folder. A placeholder file should be generated in the Build folder and the actual solution file should be generated in the src folder.
  • When using the SCons project GUID generation, the generated solution file and the generated project file have different GUIDs so the sln file cannot be copied into the src directory:
    • {813AB1DC-1B07-56AA-A473-DEA1E63B968A}
    • {E0C70307-259D-5A4A-B1B3-FB5220DB38F3}

Required information:

  • Link to SCons Users thread discussing your issue.
    n/a
  • Version of SCons
    4.8.1 Master (SHA-1: fc36781)
  • Version of Python
    3.11.3
  • Which python distribution if applicable (python.org, cygwin, anaconda, macports, brew,etc)
    WinPython
  • How you installed SCons
    filesystem git repository master branch
  • What Platform are you on? (Linux/Windows and which version)
    Win 10
  • How to reproduce your issue? Please include a small self contained reproducer. Likely a SConstruct should do for most issues.
    See above
  • How you invoke scons (The command line you're using "scons --flags some_arguments")
    python PathToSconsRoot/scripts/scons.py from test folder root
@jcbrill
Copy link
Contributor Author

jcbrill commented Oct 12, 2024

Addressed in PR #4610

Tests results:

  • Output Layout:

    8897 B Test-I1-P1S1NV-B
      62 B ├─ SConstruct
     238 B ├─ Build
     118 B │  ├─ Test.sln
     120 B │  └─ Test.vcxproj
    8597 B └─ src
     686 B    ├─ SConscript
     810 B    ├─ Test.sln
    5387 B    ├─ Test.vcxproj
    1714 B    └─ Test.vcxproj.filters
    
    2 directories, 7 files
    
  • Build\Test.sln Fragment:

    This is just a placeholder file.
    The real workspace file is here:
    
  • Build\Test.vcxproj Fragment:

    This is just a placeholder file.
    The real project file is here:
    
  • src\Test.sln Fragment:

    Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcxproj", "{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}"
    
  • src\Test.vcxproj Fragment:

    <PropertyGroup Label="Globals">
        <ProjectGuid>{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}</ProjectGuid>
    

@mwichmann
Copy link
Collaborator

When using MSVSSolution with a variant build directory, the actual solution file is generated in the build directory instead of the source directory.

There are seemingly endless cases of mishandling of files that aren't actual build products (put in the wrong places and/or not tracked properly) when variantdir is involved - see Fortran module files, msvc PDB files, etc. And now you're telling us that when it's behaving as designed (variantdir means everything goes there) that's not correct either?

@jcbrill
Copy link
Contributor Author

jcbrill commented Oct 12, 2024

And now you're telling us that when it's behaving as designed (variantdir means everything goes there) that's not correct either?

The msvs tool for MSVSProject and MSVSSolution are designed to generate the solution and project files in the source directory (presumably with the c/c++ files) and placeholder files in the build directory.

In terms of solution file generation locations, the following should be equivalent when using a variantdir:

  • scenario 1
    env.MSVSProject(..., auto_build_solution=1)
    
  • scenario 2
    p = env.MSVSProject(..., auto_build_solution=0)
    s = env.MSVSSolution(... projects=[p])
    

However, the results are not the same.

Current results:

  • scenario 1:

    • build
      • placeholder solution
      • placeholder project
    • src
      • actual solution
      • actual project
  • scenario 2:

    • build:
      • actual solution [SHOULD BE PLACEHOLDER]
      • placeholder project
    • src:
      • actual project
      • [ACTUAL SOLUTION MISSING]

When using auto_build_solution=1 with MSVSProject, the solution placeholder and actual files are generated in the correct locations.

However, using auto_build_solution=0 with MSVSProject the project files are correct but the MSVSSolution generated file and location is incorrect.

Basically, a parallel implementation for detecting the locations was missing for the "standalone" MSVSSolution invocation.

@bdbaddog
Copy link
Contributor

If that's how they're designed, then that's a flaw when using variant dirs..
Nothing should get written into the source of a variant dir.

@mwichmann
Copy link
Collaborator

The problem is we're writing those files for something external to consume, and they have to go where it makes sense for that tool. To visual studio, it would make no sense for the solution/project files to go into the variant dir.

@bdbaddog
Copy link
Contributor

The problem is we're writing those files for something external to consume, and they have to go where it makes sense for that tool. To visual studio, it would make no sense for the solution/project files to go into the variant dir.

Why? isn't it just a cd xyz, run scons? I'm not sure I get why it matters where this file is.

@jcbrill
Copy link
Contributor Author

jcbrill commented Oct 13, 2024

I suspect it is because the project files are generated assuming the source files are in the same directory.

I was under the impression that the solution/project files were for code-browsing via Visual Studio and that building would simply have python call SCons. Maybe?

A full example from the test suite follows. Perhaps it will be illuminating.

Sample: SConstruct:

SConscript('src/SConscript', variant_dir='Build', duplicate=0)

Sample SConscript:

env=Environment(tools=['msvs'], MSVC_VERSION='14.3')

env.MSVSProject(
    target = 'Test.vcxproj',
    srcs = ['test1.cpp', 'test2.cpp'],
    incs = [r'sdk_dir\sdk.h'],
    localincs = ['test.h'],
    resources = ['test.rc'],
    misc = ['readme.txt'],
    buildtarget = 'Test.exe',
    variant = 'Release',
)

Generated src\Test.vcxproj file:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
	<ItemGroup Label="ProjectConfigurations">
		<ProjectConfiguration Include="Release|Win32">
			<Configuration>Release</Configuration>
			<Platform>Win32</Platform>
		</ProjectConfiguration>
	</ItemGroup>
	<PropertyGroup Label="Globals">
		<ProjectGuid>{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}</ProjectGuid>
		<RootNamespace>Test</RootNamespace>
		<Keyword>MakeFileProj</Keyword>
		<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
	</PropertyGroup>
	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
		<ConfigurationType>Makefile</ConfigurationType>
		<UseOfMfc>false</UseOfMfc>
		<PlatformToolset>v143</PlatformToolset>
	</PropertyGroup>
	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
	<ImportGroup Label="ExtensionSettings">
	</ImportGroup>
	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
	</ImportGroup>
	<PropertyGroup Label="UserMacros" />
	<PropertyGroup>
	<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
		<NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo Starting SCons &amp;&amp; &quot;S:\SCons\_env-311-64-lint\Scripts\python.exe&quot; -c &quot;from os.path import join; import sys; sys.path = [ join(sys.prefix, &apos;Lib&apos;, &apos;site-packages&apos;, &apos;scons-4.8.1&apos;), join(sys.prefix, &apos;scons-4.8.1&apos;), join(sys.prefix, &apos;Lib&apos;, &apos;site-packages&apos;, &apos;scons&apos;), join(sys.prefix, &apos;scons&apos;) ] + sys.path; import SCons.Script; SCons.Script.main()&quot; -C &quot;S:\SCons\test-4608\Test-E1&quot; -f SConstruct &quot;Test.exe&quot;</NMakeBuildCommandLine>
		<NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo Starting SCons &amp;&amp; &quot;S:\SCons\_env-311-64-lint\Scripts\python.exe&quot; -c &quot;from os.path import join; import sys; sys.path = [ join(sys.prefix, &apos;Lib&apos;, &apos;site-packages&apos;, &apos;scons-4.8.1&apos;), join(sys.prefix, &apos;scons-4.8.1&apos;), join(sys.prefix, &apos;Lib&apos;, &apos;site-packages&apos;, &apos;scons&apos;), join(sys.prefix, &apos;scons&apos;) ] + sys.path; import SCons.Script; SCons.Script.main()&quot; -C &quot;S:\SCons\test-4608\Test-E1&quot; -f SConstruct &quot;Test.exe&quot;</NMakeReBuildCommandLine>
		<NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo Starting SCons &amp;&amp; &quot;S:\SCons\_env-311-64-lint\Scripts\python.exe&quot; -c &quot;from os.path import join; import sys; sys.path = [ join(sys.prefix, &apos;Lib&apos;, &apos;site-packages&apos;, &apos;scons-4.8.1&apos;), join(sys.prefix, &apos;scons-4.8.1&apos;), join(sys.prefix, &apos;Lib&apos;, &apos;site-packages&apos;, &apos;scons&apos;), join(sys.prefix, &apos;scons&apos;) ] + sys.path; import SCons.Script; SCons.Script.main()&quot; -C &quot;S:\SCons\test-4608\Test-E1&quot; -f SConstruct -c &quot;Test.exe&quot;</NMakeCleanCommandLine>
		<NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Test.exe</NMakeOutput>
		<NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"></NMakePreprocessorDefinitions>
		<NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"></NMakeIncludeSearchPath>
		<NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
		<NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
		<NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
		<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"></AdditionalOptions>
	</PropertyGroup>
	<ItemGroup>
		<ClInclude Include="sdk_dir\sdk.h" />
	</ItemGroup>
	<ItemGroup>
		<ClInclude Include="test.h" />
	</ItemGroup>
	<ItemGroup>
		<None Include="readme.txt" />
	</ItemGroup>
	<ItemGroup>
		<None Include="test.rc" />
	</ItemGroup>
	<ItemGroup>
		<ClCompile Include="test1.cpp" />
		<ClCompile Include="test2.cpp" />
	</ItemGroup>
	<ItemGroup>
		<None Include="SConstruct" />
	</ItemGroup>
	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
	<ImportGroup Label="ExtensionTargets">
	</ImportGroup>
</Project>
<!-- SCons Data:
gASVuAAAAAAAAAB9lIwHUmVsZWFzZZSMD1NDb25zLlRvb2wubXN2c5SMBkNvbmZpZ5STlCmBlH2UKIwLYnVpbGR0YXJnZXSUjAhUZXN0LmV4ZZSMBm91dGRpcpSMAJSMB2NtZGFyZ3OUaAqMCmNwcGRlZmluZXOUXZSMCGNwcGZsYWdzlF2UjAdydW5maWxllGgIjAhjcHBwYXRoc5RdlIwHdmFyaWFudJRoAYwIcGxhdGZvcm2UjAVXaW4zMpR1YnMu
gASVqgAAAAAAAAB9lCiMDFNvdXJjZSBGaWxlc5RdlCiMCXRlc3QxLmNwcJSMCXRlc3QyLmNwcJRljAxIZWFkZXIgRmlsZXOUXZSMDXNka19kaXJcc2RrLmiUYYwNTG9jYWwgSGVhZGVyc5RdlIwGdGVzdC5olGGMDlJlc291cmNlIEZpbGVzlF2UjAd0ZXN0LnJjlGGMC090aGVyIEZpbGVzlF2UjApyZWFkbWUudHh0lGF1Lg==-->

Generated src\Test.sln file:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 17
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Test.vcxproj", "{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Release|Win32 = Release|Win32
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}.Release|Win32.ActiveCfg = Release|Win32
		{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}.Release|Win32.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal
gASVUgAAAAAAAAB9lIwHUmVsZWFzZZSMD1NDb25zLlRvb2wubXN2c5SMBkNvbmZpZ5STlCmBlH2UKIwHdmFyaWFudJRoAYwIcGxhdGZvcm2UjAVXaW4zMpR1YnMu

I can't quicky test a "real" example.

@mwichmann
Copy link
Collaborator

if you build a project file, it's for vs to use and includes how it calls scons to build. tbh I don't know what restrictions it has, but we do have to live by them. I'm out of my depth here. does variantdir even make sense in this context? or is this "don't do that"?

@jcbrill
Copy link
Contributor Author

jcbrill commented Oct 13, 2024

I'm out of my depth here.

(raising and waving hand) Me too.

Mongodb appears to be generating their own project file. The banner indicates it is used as a code browser and for debugging. I think they use a variantdir for builds, but didn't look.

https://github.com/mongodb/mongo/blob/master/buildscripts/make_vcxproj.py

Locally, I'm trying to get a hello world example to build with no joy. Tomorrow is another day...

@jcbrill
Copy link
Contributor Author

jcbrill commented Oct 13, 2024

What follows is a minimal example of building a simple "hello, world" program and generating solution/project files for Visual Studio using a variantdir build.

It appears that the MSVSProject buildtarget (An optional string, node, or list of strings or nodes (one per build variant), to tell the Visual Studio debugger what output target to use in what build variant.) should be the same as an alias for the project.

It is configured to generate the solution file in the "root" next to the SConstruct file and the project file in the src folder next to the hello.c source file. See the project layout below.

Maybe tomorrow I'll try generating the solution file in the src folder as well.

It almost makes sense to me now. Almost.

Complete Example:

  • Project Layout:

    852 B Test-E2
    482 B ├─ SConstruct
    370 B └─ src
    276 B    ├─ SConscript
     94 B    └─ hello.c
    
    1 directory, 3 files
    
  • Source Files:

    • SConstruct

      env = Environment(tools=['msvs', 'msvc', 'mslink'], MSVC_VERSION='14.3')
      
      projects = SConscript('src/SConscript', exports='env', variant_dir='build', duplicate=False)
      
      env.MSVSSolution(
          target = 'Test.sln',
          projects = projects,
          variant = 'Release',
      )
      
    • src\SConscript

      Import('env')
      
      project = env.MSVSProject(
          target = 'Test.vcxproj',
          srcs = ['hello.c'],
          buildtarget = 'myprog',
          variant = 'Release',
          auto_build_solution=0,
      )
      
      prog = env.Program("hello", ["hello.c"])
      Alias('myprog', prog)
      
      Return('project')
      
    • src\hello.c

      #include <stdio.h>
      int main(int argc, char* argv) {
          printf("hello");
          return 0;
      }
      
  • python %SCONS_HOME%\scripts\scons.py

    scons: Reading SConscript files ...
    scons: done reading SConscript files.
    scons: Building targets ...
    cl /Fobuild\hello.obj /c src\hello.c /nologo
    hello.c
    link /nologo /OUT:build\hello.exe build\hello.obj
    Adding 'Test - Release|Win32' to 'src\Test.vcxproj'
    scons: done building targets.
    
  • Project Layout After:

    146844 B Test-E2
       482 B ├─ SConstruct
       814 B ├─ Test.sln
    140219 B ├─ build
       111 B │  ├─ Test.vcxproj
    137728 B │  ├─ hello.exe
      2380 B │  └─ hello.obj
      5329 B └─ src
       276 B    ├─ SConscript
      4486 B    ├─ Test.vcxproj
       473 B    ├─ Test.vcxproj.filters
        94 B    └─ hello.c
    
    2 directories, 9 files
    
  • Generated Solution/Project Files:

    • Test.sln

      Microsoft Visual Studio Solution File, Format Version 12.00
      # Visual Studio 17
      Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "src\Test.vcxproj", "{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}"
      EndProject
      Global
          GlobalSection(SolutionConfigurationPlatforms) = preSolution
      	    Release|Win32 = Release|Win32
          EndGlobalSection
          GlobalSection(ProjectConfigurationPlatforms) = postSolution
      	    {E0C70307-259D-5A4A-B1B3-FB5220DB38F3}.Release|Win32.ActiveCfg = Release|Win32
          	{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}.Release|Win32.Build.0 = Release|Win32
          EndGlobalSection
          GlobalSection(SolutionProperties) = preSolution
      	    HideSolutionNode = FALSE
          EndGlobalSection
      EndGlobal
      gASVUgAAAAAAAAB9lIwHUmVsZWFzZZSMD1NDb25zLlRvb2wubXN2c5SMBkNvbmZpZ5STlCmBlH2UKIwHdmFyaWFudJRoAYwIcGxhdGZvcm2UjAVXaW4zMpR1YnMu
      
    • src\Test.vcxproj

      <?xml version="1.0" encoding="utf-8"?>
      <Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      	<ItemGroup Label="ProjectConfigurations">
      		<ProjectConfiguration Include="Release|Win32">
      			<Configuration>Release</Configuration>
      			<Platform>Win32</Platform>
      		</ProjectConfiguration>
      	</ItemGroup>
      	<PropertyGroup Label="Globals">
      		<ProjectGuid>{E0C70307-259D-5A4A-B1B3-FB5220DB38F3}</ProjectGuid>
      		<RootNamespace>Test</RootNamespace>
      		<Keyword>MakeFileProj</Keyword>
      		<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
      	</PropertyGroup>
      	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
      	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
      		<ConfigurationType>Makefile</ConfigurationType>
      		<UseOfMfc>false</UseOfMfc>
      		<PlatformToolset>v143</PlatformToolset>
      	</PropertyGroup>
      	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
      	<ImportGroup Label="ExtensionSettings">
      	</ImportGroup>
      	<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
      		<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
      	</ImportGroup>
      	<PropertyGroup Label="UserMacros" />
      	<PropertyGroup>
      	<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
      		<NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo Starting SCons &amp;&amp; &quot;E:\Python\WPY64-31180\python-3.11.8.amd64\python.exe&quot; -c &quot;from os.path import join; import sys; sys.path = [ r&apos;S:\SCons\jbrill-platform-win32&apos; ] + sys.path; import SCons.Script; SCons.Script.main()&quot; -C &quot;S:\SCons\test-4608\Test-E2&quot; -f SConstruct &quot;myprog&quot;</NMakeBuildCommandLine>
      		<NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo Starting SCons &amp;&amp; &quot;E:\Python\WPY64-31180\python-3.11.8.amd64\python.exe&quot; -c &quot;from os.path import join; import sys; sys.path = [ r&apos;S:\SCons\jbrill-platform-win32&apos; ] + sys.path; import SCons.Script; SCons.Script.main()&quot; -C &quot;S:\SCons\test-4608\Test-E2&quot; -f SConstruct &quot;myprog&quot;</NMakeReBuildCommandLine>
      		<NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">echo Starting SCons &amp;&amp; &quot;E:\Python\WPY64-31180\python-3.11.8.amd64\python.exe&quot; -c &quot;from os.path import join; import sys; sys.path = [ r&apos;S:\SCons\jbrill-platform-win32&apos; ] + sys.path; import SCons.Script; SCons.Script.main()&quot; -C &quot;S:\SCons\test-4608\Test-E2&quot; -f SConstruct -c &quot;myprog&quot;</NMakeCleanCommandLine>
      		<NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">myprog</NMakeOutput>
      		<NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"></NMakePreprocessorDefinitions>
      		<NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"></NMakeIncludeSearchPath>
      		<NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
      		<NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
      		<NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
      		<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">/nologo  /TP </AdditionalOptions>
      	</PropertyGroup>
      	<ItemGroup>
      		<ClCompile Include="hello.c" />
      	</ItemGroup>
      	<ItemGroup>
      		<None Include="SConstruct" />
      	</ItemGroup>
      	<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
      	<ImportGroup Label="ExtensionTargets">
      	</ImportGroup>
      </Project>
      <!-- SCons Data:
      gASV9wAAAAAAAAB9lIwHUmVsZWFzZZSMD1NDb25zLlRvb2wubXN2c5SMBkNvbmZpZ5STlCmBlH2UKIwLYnVpbGR0YXJnZXSUjAZteXByb2eUjAZvdXRkaXKUjACUjAdjbWRhcmdzlGgKjApjcHBkZWZpbmVzlF2UjAhjcHBmbGFnc5SMClNDb25zLlV0aWyUjAVDTFZhcpSTlCmBlH2UjARkYXRhlF2UKIwHL25vbG9nb5SMAiQolIwDL1RQlIwCJCmUZXNijAdydW5maWxllGgIjAhjcHBwYXRoc5RdlIwHdmFyaWFudJRoAYwIcGxhdGZvcm2UjAVXaW4zMpR1YnMu
      gASVZwAAAAAAAAB9lCiMDFNvdXJjZSBGaWxlc5RdlIwHaGVsbG8uY5RhjAxIZWFkZXIgRmlsZXOUXZSMDUxvY2FsIEhlYWRlcnOUXZSMDlJlc291cmNlIEZpbGVzlF2UjAtPdGhlciBGaWxlc5RdlHUu-->
      
  • C:\Software\MSVS-2022-143-Com\Common7\IDE\devenv.exe Test.sln

    • GUI -> Build -> Build Solution

      Build started at 11:19 PM...
      1>------ Build started: Project: Test, Configuration: Release Win32 ------
      1>Starting SCons
      1>scons: Entering directory `S:\SCons\test-4608\Test-E2'
      1>scons: Reading SConscript files ...
      1>scons: done reading SConscript files.
      1>scons: Building targets ...
      1>scons: `myprog' is up to date.
      1>scons: done building targets.
      ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
      ========== Build completed at 11:19 PM and took 03.392 seconds ==========
      
    • GUI -> Build -> Clean Solution

      Clean started at 11:20 PM...
      1>------ Clean started: Project: Test, Configuration: Release Win32 ------
      1>Starting SCons
      1>scons: Entering directory `S:\SCons\test-4608\Test-E2'
      1>scons: Reading SConscript files ...
      1>scons: done reading SConscript files.
      1>scons: Cleaning targets ...
      1>Removed build\hello.obj
      1>Removed build\hello.exe
      1>scons: done cleaning targets.
      ========== Clean: 1 succeeded, 0 failed, 0 skipped ==========
      ========== Clean completed at 11:20 PM and took 01.925 seconds ==========
      
    • GUI -> Build -> Build Solution

      Build started at 11:21 PM...
      1>------ Build started: Project: Test, Configuration: Release Win32 ------
      1>Starting SCons
      1>scons: Entering directory `S:\SCons\test-4608\Test-E2'
      1>scons: Reading SConscript files ...
      1>scons: done reading SConscript files.
      1>scons: Building targets ...
      1>cl /Fobuild\hello.obj /c src\hello.c /nologo
      1>hello.c
      1>link /nologo /OUT:build\hello.exe build\hello.obj
      1>scons: done building targets.
      ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
      ========== Build completed at 11:21 PM and took 03.291 seconds ==========
      
    • GUI -> Build -> Rebuild Solution

      Rebuild started at 11:21 PM...
      1>------ Rebuild All started: Project: Test, Configuration: Release Win32 ------
      1>Starting SCons
      1>scons: Entering directory `S:\SCons\test-4608\Test-E2'
      1>scons: Reading SConscript files ...
      1>scons: done reading SConscript files.
      1>scons: Building targets ...
      1>scons: `myprog' is up to date.
      1>scons: done building targets.
      ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
      ========== Rebuild completed at 11:21 PM and took 02.022 seconds ==========
      

@mwichmann mwichmann added the MSVC Microsoft Visual C++ Support label Oct 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
MSVC Microsoft Visual C++ Support
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants