summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/vstudio/impl/vs201x.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-10-11 00:48:16 +0800
committerruki <[email protected]>2022-10-11 00:48:16 +0800
commitfba58146ef2b8e505e59ec58948e319606354ef7 (patch)
tree078b64a2f1bc6e75d549ddee2134cb515e19077d /xmake/plugins/project/vstudio/impl/vs201x.lua
parenta0e9f935de826a2050b056438e9c3cb521c8ddf2 (diff)
improve rules for generator
Diffstat (limited to 'xmake/plugins/project/vstudio/impl/vs201x.lua')
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua44
1 files changed, 43 insertions, 1 deletions
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index edcfde2cb..116ca689f 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -158,7 +158,7 @@ function _make_custom_commands_for_objectrules(commands, target, sourcebatch, vc
-- get rule
local rulename = assert(sourcebatch.rulename, "unknown rule for sourcebatch!")
- local ruleinst = assert(project.rule(rulename) or rule.rule(rulename), "unknown rule: %s", rulename)
+ local ruleinst = assert(target:rule(rulename) or project.rule(rulename) or rule.rule(rulename), "unknown rule: %s", rulename)
-- generate commands for xx_buildcmd_files
local scriptname = "buildcmd_files" .. (suffix and ("_" .. suffix) or "")
@@ -505,6 +505,45 @@ function _config_targets()
end
end
+-- load rules in the required packages for target
+function _load_package_rules_for_target(target)
+ for _, rulename in ipairs(target:get("rules")) do
+ local packagename = rulename:match("@(.-)/")
+ if packagename then
+ local pkginfo = project.required_package(packagename)
+ if pkginfo then
+ local r = pkginfo:rule(rulename)
+ if r then
+ target:rule_add(r)
+ for _, dep in pairs(r:deps()) do
+ target:rule_add(dep)
+ end
+ end
+ end
+ end
+ end
+end
+
+-- load rules in the required packages for targets
+-- @see https://github.com/xmake-io/xmake/issues/2374
+--
+-- @code
+-- add_requires("zlib", {system = false})
+-- target("test")
+-- set_kind("binary")
+-- add_files("src/*.cpp")
+-- add_packages("zlib")
+-- add_rules("@zlib/test")
+-- @endcode
+--
+function _load_package_rules_for_targets()
+ for _, target in ipairs(project.ordertargets()) do
+ if target:is_enabled() then
+ _load_package_rules_for_target(target)
+ end
+ end
+end
+
-- make vstudio project
function make(outputdir, vsinfo)
@@ -558,6 +597,9 @@ function make(outputdir, vsinfo)
-- install and update requires
install_requires()
+ -- load package rules for targets
+ _load_package_rules_for_targets()
+
-- config targets
_config_targets()