summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2024-02-08 14:30:37 +0100
committerArthur LAURENT <[email protected]>2024-02-08 14:51:43 +0100
commit955f2bb283e338e10cb3616c25ed41db9103d6f2 (patch)
treee878158f01e8b02dcaed630a79d1034d8134c5c5
parente721aae44e6b8fbfd8b6434bffbdf5279259af96 (diff)
support ProjectReferences for VS project generator
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua7
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua14
2 files changed, 21 insertions, 0 deletions
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index d67a3f7a3..b3c6f84c2 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -546,6 +546,13 @@ function make(outputdir, vsinfo)
-- save file groups
_target.filegroups = table.unique(table.join(_target.filegroups or {}, target:get("filegroups")))
+ -- save references to deps
+ for _, dep in ipairs(target:orderdeps()) do
+ _target.deps = _target.deps or {}
+ local dep_name = dep:name()
+ _target.deps[dep_name] = path.relative(path.join(vsinfo.solution_dir, dep_name, dep_name .. ".vcxproj"), _target.project_dir)
+ end
+
for filegroup, groupconf in pairs(target:extraconf("filegroups")) do
_target.filegroups_extraconf = _target.filegroups_extraconf or {}
local mergedconf = _target.filegroups_extraconf[filegroup]
diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
index 56850bbe3..ee21e88b1 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
@@ -218,6 +218,17 @@ function _make_header(vcxprojfile, vsinfo)
vcxprojfile:enter("<Project DefaultTargets=\"Build\" ToolsVersion=\"%s.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">", assert(vsinfo.project_version))
end
+-- make references
+function _make_references(vcxprojfile, vsinfo, target)
+ vcxprojfile:print("<ItemGroup>")
+ for dep_name, dep_vcxprojfile in pairs(target.deps) do
+ vcxprojfile:print("<ProjectReference Include=\"%s\">", dep_vcxprojfile)
+ vcxprojfile:print("<Project>{%s}</Project>", hash.uuid4(dep_name))
+ vcxprojfile:print("</ProjectReference>")
+ end
+ vcxprojfile:print("</ItemGroup>")
+end
+
-- make tailer
function _make_tailer(vcxprojfile, vsinfo, target)
vcxprojfile:print("<Import Project=\"%$(VCTargetsPath)\\Microsoft.Cpp.targets\" />")
@@ -1405,6 +1416,9 @@ function make(vsinfo, target)
-- make source files
_make_source_files(vcxprojfile, vsinfo, target)
+ -- make deps references
+ _make_references(vcxprojfile, vsinfo, target)
+
-- make tailer
_make_tailer(vcxprojfile, vsinfo, target)