[build] Building library with vc++ 64-bit does not find vcvarsall.bat
If I build any library with any version vc++ 64-bit compiler, by using address-model=64, the vcvarsall.bat is looked for at, for example with msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to basic compilation failures. The path for vcvarsall.bat for msvc-14.0 is C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat instead. All versions of vc++ follow this path structure for vcvarsall.bat Building with any version of vc++ 32-bit, by not specifying the address-model, works correctly.
On Fri, Oct 13, 2017 at 4:11 PM, Edward Diener via Boost < boost@lists.boost.org> wrote:
If I build any library with any version vc++ 64-bit compiler, by using address-model=64, the vcvarsall.bat is looked for at, for example with msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to basic compilation failures. The path for vcvarsall.bat for msvc-14.0 is C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat instead. All versions of vc++ follow this path structure for vcvarsall.bat
Building with any version of vc++ 32-bit, by not specifying the address-model, works correctly.
I do not see this behavior on my system, using a stock cmd.exe (not running from a Visual Studio command line prompt) using the command: c:\boost\libs\format\test>rmdir /s /q c:\boost\bin.v2\libs c:\boost\libs\format\test>..\..\..\b2 toolset=msvc-14.0 address-model=32,64 variant=debug,release -q -j5 The resulting test binaries were correctly 32-bit and 64-bit. If I do not specify address-model on the command line, I get a 32-bit executable. I find it quite odd that 32-bit would be the default here. In the summary output after launching b2 when building, 64-bit is not displayed as a line item either, only 32-bit is. But on linux 32-bit and 64-bit line items are shown in the summary. If I do the same build with msvc-14.1 as the toolset, the default output is also 32-bit. It looks like there is some technical debt that needs to be addressed here. Shouldn't default builds on Visual Studio 2015, 2017 be 64-bit if not specified? - Jim
On Fri, Oct 13, 2017 at 10:34 PM, James E. King, III via Boost
If I do the same build with msvc-14.1 as the toolset, the default output is also 32-bit. It looks like there is some technical debt that needs to be addressed here. Shouldn't default builds on Visual Studio 2015, 2017 be 64-bit if not specified?
Why should it be? -- Olaf
On 10/13/2017 4:34 PM, James E. King, III via Boost wrote:
On Fri, Oct 13, 2017 at 4:11 PM, Edward Diener via Boost < boost@lists.boost.org> wrote:
If I build any library with any version vc++ 64-bit compiler, by using address-model=64, the vcvarsall.bat is looked for at, for example with msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to basic compilation failures. The path for vcvarsall.bat for msvc-14.0 is C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat instead. All versions of vc++ follow this path structure for vcvarsall.bat
Building with any version of vc++ 32-bit, by not specifying the address-model, works correctly.
I do not see this behavior on my system, using a stock cmd.exe (not running from a Visual Studio command line prompt) using the command:
c:\boost\libs\format\test>rmdir /s /q c:\boost\bin.v2\libs c:\boost\libs\format\test>..\..\..\b2 toolset=msvc-14.0 address-model=32,64 variant=debug,release -q -j5
Please try with just address-model=64. Why b2 tries to invoke vcvarsall.bat from the wrong directory when I specify address-model=64 is the problem. The default is 32-bits if no address model is specified. Whether or not that should be so is another side issue.
The resulting test binaries were correctly 32-bit and 64-bit. If I do not specify address-model on the command line, I get a 32-bit executable. I find it quite odd that 32-bit would be the default here. In the summary output after launching b2 when building, 64-bit is not displayed as a line item either, only 32-bit is. But on linux 32-bit and 64-bit line items are shown in the summary.
If I do the same build with msvc-14.1 as the toolset, the default output is also 32-bit. It looks like there is some technical debt that needs to be addressed here. Shouldn't default builds on Visual Studio 2015, 2017 be 64-bit if not specified?
- Jim
On 10/13/2017 4:11 PM, Edward Diener via Boost wrote:
If I build any library with any version vc++ 64-bit compiler, by using address-model=64, the vcvarsall.bat is looked for at, for example with msvc-14.0, C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/vcvarsall.bat and is not found. Naturally this leads to basic compilation failures. The path for vcvarsall.bat for msvc-14.0 is C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat instead. All versions of vc++ follow this path structure for vcvarsall.bat
Building with any version of vc++ 32-bit, by not specifying the address-model, works correctly.
After rebuilding b2 everything is working correctly.
participants (3)
-
Edward Diener
-
James E. King, III
-
Olaf van der Spek