diff options
| author | ruki <[email protected]> | 2023-08-21 22:18:05 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-08-21 22:18:05 +0800 |
| commit | bba45b29a174e83ff6aff784e7aaec27bccb9ac0 (patch) | |
| tree | 01e8ab80234a2478a500a11308a3c16bc7d57fac | |
| parent | e73df8b4713c4b8c928c77d0baa4185be1db6517 (diff) | |
| parent | 2dd4262bd17ce4559608189c5cfa8ba90f729304 (diff) | |
Merge pull request #4104 from xmake-io/extrafiles
Add extrafiles for vs/vsxmake project generators
| -rw-r--r-- | xmake/core/project/target.lua | 1 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x.lua | 4 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua | 8 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua | 18 | ||||
| -rw-r--r-- | xmake/plugins/project/vsxmake/getinfo.lua | 7 | ||||
| -rw-r--r-- | xmake/plugins/project/vsxmake/vsxmake.lua | 2 |
6 files changed, 22 insertions, 18 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index ca46a7b69..aa03fa48a 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -2454,6 +2454,7 @@ function target.apis() , "target.add_cleanfiles" , "target.add_configfiles" , "target.add_installfiles" + , "target.add_extrafiles" -- target.del_xxx (deprecated) , "target.del_files" -- target.remove_xxx diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua index 511494b19..6acc09c69 100644 --- a/xmake/plugins/project/vstudio/impl/vs201x.lua +++ b/xmake/plugins/project/vstudio/impl/vs201x.lua @@ -530,14 +530,16 @@ function make(outputdir, vsinfo) -- save all sourcefiles and headerfiles _target.sourcefiles = table.unique(table.join(_target.sourcefiles or {}, (target:sourcefiles()))) _target.headerfiles = table.unique(table.join(_target.headerfiles or {}, (target:headerfiles()))) + _target.extrafiles = table.unique(table.join(_target.extrafiles or {}, (target:get("extrafiles")))) -- sort them to stabilize generation table.sort(_target.sourcefiles) table.sort(_target.headerfiles) + table.sort(_target.extrafiles) -- save file groups _target.filegroups = table.unique(table.join(_target.filegroups or {}, target:get("filegroups"))) - + 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 1be380130..f5bb88d73 100644 --- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua +++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua @@ -1067,7 +1067,7 @@ function _make_common_items(vcxprojfile, vsinfo, target) end -- make header file -function _make_header_file(vcxprojfile, includefile, vcxprojdir) +function _make_include_file(vcxprojfile, includefile, vcxprojdir) vcxprojfile:print("<ClInclude Include=\"%s\" />", path.relative(path.absolute(includefile), vcxprojdir)) end @@ -1343,13 +1343,13 @@ function _make_source_files(vcxprojfile, vsinfo, target) vcxprojfile:leave("</ItemGroup>") - -- add header files + -- add include files local pcheader = target.pcxxheader or target.pcheader vcxprojfile:enter("<ItemGroup>") - for _, includefile in ipairs(target.headerfiles) do + for _, includefile in ipairs(table.join(target.headerfiles or {}, target.extrafiles)) do -- we need to ignore pcheader file to fix https://github.com/xmake-io/xmake/issues/1171 if not pcheader or includefile ~= pcheader then - _make_header_file(vcxprojfile, includefile, target.project_dir) + _make_include_file(vcxprojfile, includefile, target.project_dir) end end vcxprojfile:leave("</ItemGroup>") diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua index 572ec0622..caed16b2a 100644 --- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua +++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua @@ -131,7 +131,7 @@ function _make_filters(filtersfile, vsinfo, target, vcxprojdir) -- add filters filtersfile:enter("<ItemGroup>") local exists = {} - for _, filepath in pairs(table.join(target.sourcefiles, target.headerfiles)) do + for _, filepath in pairs(table.join(target.sourcefiles, target.headerfiles or {}, target.extrafiles)) do local filter = _make_filter(filepath, target, vcxprojdir) while filter and filter ~= '.' do if not exists[filter] then @@ -177,15 +177,13 @@ function _make_sources(filtersfile, vsinfo, target, vcxprojdir) filtersfile:leave("</ItemGroup>") end --- make headers -function _make_headers(filtersfile, vsinfo, target, vcxprojdir) - - -- and headers +-- make includes +function _make_includes(filtersfile, vsinfo, target, vcxprojdir) filtersfile:enter("<ItemGroup>") - for _, headerfile in ipairs(target.headerfiles) do - local filter = _make_filter(headerfile, target, vcxprojdir) + for _, includefile in ipairs(table.join(target.headerfiles or {}, target.extrafiles)) do + local filter = _make_filter(includefile, target, vcxprojdir) if filter then - filtersfile:enter("<ClInclude Include=\"%s\">", path.relative(path.absolute(headerfile), vcxprojdir)) + filtersfile:enter("<ClInclude Include=\"%s\">", path.relative(path.absolute(includefile), vcxprojdir)) filtersfile:print("<Filter>%s</Filter>", filter) filtersfile:leave("</ClInclude>") end @@ -218,8 +216,8 @@ function make(vsinfo, target) -- make sources _make_sources(filtersfile, vsinfo, target, vcxprojdir) - -- make headers - _make_headers(filtersfile, vsinfo, target, vcxprojdir) + -- make includes + _make_includes(filtersfile, vsinfo, target, vcxprojdir) -- make tailer _make_tailer(filtersfile, vsinfo) diff --git a/xmake/plugins/project/vsxmake/getinfo.lua b/xmake/plugins/project/vsxmake/getinfo.lua index 322292f72..2c3829284 100644 --- a/xmake/plugins/project/vsxmake/getinfo.lua +++ b/xmake/plugins/project/vsxmake/getinfo.lua @@ -496,14 +496,16 @@ function main(outputdir, vsinfo) -- save all sourcefiles and headerfiles _target.sourcefiles = table.unique(table.join(_target.sourcefiles or {}, (target:sourcefiles()))) _target.headerfiles = table.unique(table.join(_target.headerfiles or {}, (target:headerfiles()))) + _target.extrafiles = table.unique(table.join(_target.extrafiles or {}, (target:get("extrafiles")))) -- sort them to stabilize generation table.sort(_target.sourcefiles) table.sort(_target.headerfiles) + table.sort(_target.extrafiles) -- save file groups _target.filegroups = table.unique(table.join(_target.filegroups or {}, target:get("filegroups"))) - + for filegroup, groupconf in pairs(target:extraconf("filegroups")) do _target.filegroups_extraconf = _target.filegroups_extraconf or {} local mergedconf = _target.filegroups_extraconf[filegroup] @@ -534,7 +536,8 @@ function main(outputdir, vsinfo) local root = target.absscriptdir or projectdir target.sourcefiles = table.imap(target.sourcefiles, function(_, v) return path.relative(v, projectdir) end) target.headerfiles = table.imap(target.headerfiles, function(_, v) return path.relative(v, projectdir) end) - for _, f in ipairs(table.join(target.sourcefiles, target.headerfiles)) do + target.extrafiles = table.imap(target.extrafiles, function(_, v) return path.relative(v, projectdir) end) + for _, f in ipairs(table.join(target.sourcefiles, target.headerfiles or {}, target.extrafiles)) do local dir = _make_filter(f, target, root) local escaped_f = vsutils.escape(f) target._paths[f] = diff --git a/xmake/plugins/project/vsxmake/vsxmake.lua b/xmake/plugins/project/vsxmake/vsxmake.lua index 90fc1cf8e..50695ebc2 100644 --- a/xmake/plugins/project/vsxmake/vsxmake.lua +++ b/xmake/plugins/project/vsxmake/vsxmake.lua @@ -140,7 +140,7 @@ function _buildparams(info, target, default) local files = info._targets[target].sourcefiles table.insert(r, _filter_files(files, {".ui"})) elseif args.incc then - local files = info._targets[target].headerfiles + local files = table.join(info._targets[target].headerfiles or {}, info._targets[target].extrafiles) table.insert(r, _filter_files(files, nil, {".natvis"})) elseif args.incnatvis then local files = info._targets[target].headerfiles |
