diff --git a/modules/vstudio/_preload.lua b/modules/vstudio/_preload.lua
index eae6fae82b..0d3f35e723 100644
--- a/modules/vstudio/_preload.lua
+++ b/modules/vstudio/_preload.lua
@@ -195,6 +195,26 @@
}
}
+ p.api.register {
+ name = "enablemodules",
+ scope = { "config" },
+ kind = "string",
+ allowed = {
+ "On",
+ "Off"
+ }
+ }
+
+ p.api.register {
+ name = "buildstlmodules",
+ scope = { "config" },
+ kind = "string",
+ allowed = {
+ "On",
+ "Off"
+ }
+ }
+
--
-- Decide when the full module should be loaded.
--
diff --git a/modules/vstudio/tests/vc2019/test_compile_settings.lua b/modules/vstudio/tests/vc2019/test_compile_settings.lua
index 39b7f610d2..8d1aabaf87 100644
--- a/modules/vstudio/tests/vc2019/test_compile_settings.lua
+++ b/modules/vstudio/tests/vc2019/test_compile_settings.lua
@@ -148,3 +148,29 @@
false
]]
end
+
+ function suite.enableModulesOff()
+ enablemodules 'Off'
+ prepare()
+ test.capture [[
+
+ NotUsing
+ Level3
+ Disabled
+ Level3
+ false
+ ]]
+ end
+
+ function suite.enableModulesOn()
+ enablemodules 'On'
+ prepare()
+ test.capture [[
+
+ NotUsing
+ Level3
+ Disabled
+ Level3
+ true
+ ]]
+ end
diff --git a/modules/vstudio/tests/vc2022/test_compile_settings.lua b/modules/vstudio/tests/vc2022/test_compile_settings.lua
index d692091615..0f1d8e72bb 100644
--- a/modules/vstudio/tests/vc2022/test_compile_settings.lua
+++ b/modules/vstudio/tests/vc2022/test_compile_settings.lua
@@ -160,3 +160,29 @@ function suite.TreatAngleIncludeAsExternalOffFile()
false
]]
end
+
+function suite.BuildStlModulesOff()
+ buildstlmodules 'Off'
+ prepare()
+ test.capture [[
+
+ NotUsing
+ Level3
+ Disabled
+ Level3
+ false
+ ]]
+end
+
+function suite.BuildStlModulesOn()
+ buildstlmodules 'On'
+ prepare()
+ test.capture [[
+
+ NotUsing
+ Level3
+ Disabled
+ Level3
+ true
+ ]]
+end
\ No newline at end of file
diff --git a/modules/vstudio/vs2010_vcxproj.lua b/modules/vstudio/vs2010_vcxproj.lua
index 9eec95a402..09d5af86eb 100644
--- a/modules/vstudio/vs2010_vcxproj.lua
+++ b/modules/vstudio/vs2010_vcxproj.lua
@@ -403,6 +403,8 @@
m.externalAngleBrackets,
m.scanSourceForModuleDependencies,
m.useStandardPreprocessor,
+ m.enableModules,
+ m.buildStlModules,
}
if cfg.kind == p.STATICLIB then
@@ -3024,6 +3026,24 @@
end
+ function m.enableModules(cfg)
+ if _ACTION >= "vs2019" then
+ if cfg.enablemodules then
+ m.element("EnableModules", nil, iif(cfg.enablemodules == "On", "true", "false"))
+ end
+ end
+ end
+
+
+ function m.buildStlModules(cfg)
+ if _ACTION >= "vs2022" then
+ if cfg.buildstlmodules then
+ m.element("BuildStlModules", nil, iif(cfg.buildstlmodules == "On", "true", "false"))
+ end
+ end
+ end
+
+
function m.externalAngleBrackets(cfg, condition)
if _ACTION >= "vs2019" then
if cfg.externalanglebrackets == p.OFF then
diff --git a/website/docs/buildstlmodules.md b/website/docs/buildstlmodules.md
new file mode 100644
index 0000000000..1836a8c237
--- /dev/null
+++ b/website/docs/buildstlmodules.md
@@ -0,0 +1,24 @@
+Sets whether or not the compiler should build STL modules.
+
+```lua
+buildstlmodules("value")
+```
+
+### Parameters ###
+
+`value` is one of:
+
+- `On`
+- `Off`
+
+### Applies To ###
+
+The `config` scope.
+
+### Availability ###
+
+Premake 5.0.0 beta 3 or later for Visual Studio 2022 and later.
+
+### See Also ###
+
+* [enablemodules](enablemodules.md)
\ No newline at end of file
diff --git a/website/docs/enablemodules.md b/website/docs/enablemodules.md
new file mode 100644
index 0000000000..c7d46206fc
--- /dev/null
+++ b/website/docs/enablemodules.md
@@ -0,0 +1,20 @@
+Sets whether or not the compiler should enable C++20 modules.
+
+```lua
+enablemodules("value")
+```
+
+### Parameters ###
+
+`value` is one of:
+
+- `On`
+- `Off`
+
+### Applies To ###
+
+The `config` scope.
+
+### Availability ###
+
+Premake 5.0.0 beta 3 or later for Visual Studio 2019 and later.
\ No newline at end of file
diff --git a/website/sidebars.js b/website/sidebars.js
index ecf0edba68..17d7ce74d8 100644
--- a/website/sidebars.js
+++ b/website/sidebars.js
@@ -80,6 +80,7 @@ module.exports = {
'buildoptions',
'buildoutputs',
'buildrule',
+ 'buildstlmodules',
'callingconvention',
'cdialect',
'characterset',
@@ -139,6 +140,7 @@ module.exports = {
'embed',
'embedandsign',
'enabledefaultcompileitems',
+ 'enablemodules',
'enableunitybuild',
'enablewarnings',
'endian',