Skip to content

Commit f6da520

Browse files
committed
force PlatformToolset from msbuild command line
1 parent 2976776 commit f6da520

File tree

4 files changed

+41
-34
lines changed

4 files changed

+41
-34
lines changed

conan/tools/microsoft/msbuild.py

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from conan.tools.microsoft.msbuilddeps import MSBuildDeps
44
from conan.tools.microsoft.toolchain import MSBuildToolchain
5+
from conan.tools.microsoft.visual import msvs_toolset
56
from conans.errors import ConanException
67

78

@@ -31,6 +32,7 @@ def __init__(self, conanfile):
3132
if conanfile.settings.get_safe("os") == "WindowsCE":
3233
msvc_arch = conanfile.settings.get_safe("os.platform")
3334
self.platform = msvc_arch
35+
self.toolset = msvs_toolset(conanfile)
3436

3537
def command(self, sln, targets=None):
3638
cmd = ('msbuild "%s" /p:Configuration=%s /p:Platform=%s'
@@ -50,6 +52,9 @@ def command(self, sln, targets=None):
5052
raise ConanException("targets argument should be a list")
5153
cmd += " /target:{}".format(";".join(targets))
5254

55+
if self.toolset:
56+
cmd += f" /p:PlatformToolset=\"{self.toolset}\""
57+
5358
props_paths = []
5459
for props_file in (MSBuildToolchain.filename, MSBuildDeps.filename):
5560
props_path = os.path.join(self._conanfile.generators_folder, props_file)

conan/tools/microsoft/toolchain.py

+2-33
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from conan.tools._check_build_profile import check_using_build_profile
88
from conan.tools.build import build_jobs
99
from conan.tools.intel.intel_cc import IntelCC
10-
from conan.tools.microsoft.visual import VCVars, msvc_version_to_toolset_version
10+
from conan.tools.microsoft.visual import msvs_toolset, VCVars
1111
from conans.errors import ConanException
1212
from conans.util.files import save, load
1313

@@ -54,7 +54,7 @@ def __init__(self, conanfile):
5454
self.configuration = conanfile.settings.build_type
5555
self.runtime_library = self._runtime_library(conanfile.settings)
5656
self.cppstd = conanfile.settings.get_safe("compiler.cppstd")
57-
self.toolset = self._msvs_toolset(conanfile)
57+
self.toolset = msvs_toolset(conanfile)
5858
self.properties = {}
5959
check_using_build_profile(self._conanfile)
6060

@@ -82,37 +82,6 @@ def generate(self):
8282
else:
8383
VCVars(self._conanfile).generate()
8484

85-
@staticmethod
86-
def _msvs_toolset(conanfile):
87-
settings = conanfile.settings
88-
compiler = settings.get_safe("compiler")
89-
compiler_version = settings.get_safe("compiler.version")
90-
if compiler == "msvc":
91-
subs_toolset = settings.get_safe("compiler.toolset")
92-
if subs_toolset:
93-
return subs_toolset
94-
return msvc_version_to_toolset_version(compiler_version)
95-
if compiler == "intel":
96-
compiler_version = compiler_version if "." in compiler_version else \
97-
"%s.0" % compiler_version
98-
return "Intel C++ Compiler " + compiler_version
99-
if compiler == "intel-cc":
100-
return IntelCC(conanfile).ms_toolset
101-
if compiler == "Visual Studio":
102-
toolset = settings.get_safe("compiler.toolset")
103-
if not toolset:
104-
toolsets = {"17": "v143",
105-
"16": "v142",
106-
"15": "v141",
107-
"14": "v140",
108-
"12": "v120",
109-
"11": "v110",
110-
"10": "v100",
111-
"9": "v90",
112-
"8": "v80"}
113-
toolset = toolsets.get(compiler_version)
114-
return toolset or ""
115-
11685
@staticmethod
11786
def _runtime_library(settings):
11887
compiler = settings.compiler

conan/tools/microsoft/visual.py

+32
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import textwrap
33

4+
from conan.tools.intel.intel_cc import IntelCC
45
from conans.client.tools import vs_installation_path
56
from conans.client.tools.version import Version
67
from conans.errors import ConanException, ConanInvalidConfiguration
@@ -268,3 +269,34 @@ def is_msvc_static_runtime(conanfile):
268269
:return: True, if msvc + runtime MT. Otherwise, False
269270
"""
270271
return is_msvc(conanfile) and "MT" in msvc_runtime_flag(conanfile)
272+
273+
274+
def msvs_toolset(conanfile):
275+
settings = conanfile.settings
276+
compiler = settings.get_safe("compiler")
277+
compiler_version = settings.get_safe("compiler.version")
278+
if compiler == "msvc":
279+
subs_toolset = settings.get_safe("compiler.toolset")
280+
if subs_toolset:
281+
return subs_toolset
282+
return msvc_version_to_toolset_version(compiler_version)
283+
if compiler == "intel":
284+
compiler_version = compiler_version if "." in compiler_version else \
285+
"%s.0" % compiler_version
286+
return "Intel C++ Compiler " + compiler_version
287+
if compiler == "intel-cc":
288+
return IntelCC(conanfile).ms_toolset
289+
if compiler == "Visual Studio":
290+
toolset = settings.get_safe("compiler.toolset")
291+
if not toolset:
292+
toolsets = {"17": "v143",
293+
"16": "v142",
294+
"15": "v141",
295+
"14": "v140",
296+
"12": "v120",
297+
"11": "v110",
298+
"10": "v100",
299+
"9": "v90",
300+
"8": "v80"}
301+
toolset = toolsets.get(compiler_version)
302+
return toolset or ""

conans/test/functional/toolchains/microsoft/test_msbuild.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,8 @@ def test_toolchain_win_multi(self):
581581
])
582582
cmd = ('set "VSCMD_START_DIR=%%CD%%" && '
583583
f'"{vcvars_path}" x64 && msbuild "MyProject.sln" /p:Configuration={configuration} '
584-
f'/p:Platform={platform_arch} /p:ForceImportBeforeCppTargets="{props_paths}"')
584+
f'/p:Platform={platform_arch} /p:PlatformToolset={self.toolset} '
585+
f'/p:ForceImportBeforeCppTargets="{props_paths}"')
585586
client.run_command(cmd)
586587
self.assertIn("Visual Studio {ide_year}".format(ide_year=self.ide_year), client.out)
587588
self.assertIn("[vcvarsall.bat] Environment initialized for: 'x64'", client.out)

0 commit comments

Comments
 (0)