diff options
| author | Arthur LAURENT <[email protected]> | 2024-02-08 14:30:37 +0100 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2024-02-08 14:51:43 +0100 |
| commit | 955f2bb283e338e10cb3616c25ed41db9103d6f2 (patch) | |
| tree | e878158f01e8b02dcaed630a79d1034d8134c5c5 | |
| parent | e721aae44e6b8fbfd8b6434bffbdf5279259af96 (diff) | |
support ProjectReferences for VS project generator
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x.lua | 7 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua | 14 |
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) |
