boostorg / build

B2 makes it easy to build C++ projects, everywhere.
Boost Software License 1.0
231 stars 48 forks source link

Missing <arch-and-model> if using msvc #730

Open UMU618 opened 3 years ago

UMU618 commented 3 years ago

I use b2 to compile a simple example, and got an error with msvc/Windows:

$ b2
...patience...
...found 817 targets...
...updating 1 target...
msvc.link bin\msvc-14.2\release\cxxstd-latest-iso\threading-multi\test_boost.exe
LINK : fatal error LNK1181: cannot open input file 'boost_program_options-vc142-mt-1_76.lib'

        call "bin\standalone\msvc\msvc-14.2\msvc-setup.bat"  >nul
 link /NOLOGO /INCREMENTAL:NO "bin\msvc-14.2\release\cxxstd-latest-iso\threading-multi\main.obj"    "boost_program_options-vc142-mt-1_76.lib"  /MACHINE:X64 /MANIFEST:EMBED /subsystem:console /out:"bin\msvc-14.2\release\cxxstd-latest-iso\threading-multi\test_boost.exe" /LIBPATH:"C:\dev\lib"

...failed msvc.link bin\msvc-14.2\release\cxxstd-latest-iso\threading-multi\test_boost.exe...
...failed updating 1 target...

The file boost_program_options-vc142-mt-1_76.lib should be boost_program_options-vc142-mt-x64-1_76.lib.

https://github.com/boostorg/build/blob/d52f1993d906aa3fd3649a8dd5134402794bf86e/src/contrib/boost.jam#L306

After looking up boost.jam, I think on Windows this should be:

rule tag_versioned ( name : type ? : property-set )
{
    return [ common.format-name <base> <toolset> <threading> <runtime> <arch-and-model>
        -$(.version_tag) -$(.build_id) : $(name) : $(type) : $(property-set) ] ;
}

After adding , b2 architecture=x86 address-model=64 succeeded.

UMU618 commented 3 years ago

Jamfile.v2

import boost ;

# no problem if using <root> to locate $(BOOST_ROOT)
#using boost : 1.76 : <root>C:/dev/boost_1_76_0 ;

# failed if use the installed one
using boost : 1.76 : <include>C:/dev/include/boost-1_76 <library>C:/dev/lib ;

boost.use-project ;

project test_boost
  : requirements
    <cxxstd>latest
      <toolset>clang:<cxxstd>17
    <optimization>speed
    <threading>multi
  : default-build release
  : build-dir ./bin
  ;

exe test_boost
  : main.cpp
  : <library>/boost//program_options
  ;
Kojoley commented 3 years ago

https://github.com/boostorg/boost/commit/06c1e1ee6cde5231eda696b8d7bf957fd1333d93 was not mirrored to src/contrib/boost.jam

UMU618 commented 3 years ago

boostorg/boost@06c1e1e was not mirrored to src/contrib/boost.jam

Thank you! I will use stage instead of install on Windows.