summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/vstudio/impl
diff options
context:
space:
mode:
authorruki <[email protected]>2025-06-26 10:56:34 +0800
committerGitHub <[email protected]>2025-06-26 10:56:34 +0800
commit2fd95e31bfb024029680bdac00298b04badd4578 (patch)
tree007603cb3c07be08552a6dd4548c6f8f91f17f35 /xmake/plugins/project/vstudio/impl
parent2439edb2dc5f8f2fab753a7688489d99fd45bf7f (diff)
parent42e25f69c356dbb014459f472da1e99e27849418 (diff)
Merge pull request #6572 from fcying/dev
feat(plugin/project): support gen compile_commands.json for specific target
Diffstat (limited to 'xmake/plugins/project/vstudio/impl')
-rw-r--r--xmake/plugins/project/vstudio/impl/vs200x.lua6
-rw-r--r--xmake/plugins/project/vstudio/impl/vs200x_solution.lua7
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua4
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x_solution.lua9
4 files changed, 18 insertions, 8 deletions
diff --git a/xmake/plugins/project/vstudio/impl/vs200x.lua b/xmake/plugins/project/vstudio/impl/vs200x.lua
index d1f220c8a..099b2e224 100644
--- a/xmake/plugins/project/vstudio/impl/vs200x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs200x.lua
@@ -22,6 +22,7 @@
import("core.project.project")
import("vs200x_solution")
import("vs200x_vcproj")
+import("plugins.project.utils.target_utils", {rootdir = os.programdir()})
-- make vstudio project
function make(outputdir, vsinfo)
@@ -35,15 +36,16 @@ function make(outputdir, vsinfo)
-- make solution
vs200x_solution.make(vsinfo)
+ local project_targets = target_utils.get_project_targets()
-- TODO
-- disable precompiled header first
- for _, target in pairs(project.targets()) do
+ for _, target in pairs(project_targets) do
target:set("pcheader", nil)
target:set("pcxxheader", nil)
end
-- make vsprojs
- for _, target in pairs(project.targets()) do
+ for _, target in pairs(project_targets) do
if not target:is_phony() then
vs200x_vcproj.make(vsinfo, target)
end
diff --git a/xmake/plugins/project/vstudio/impl/vs200x_solution.lua b/xmake/plugins/project/vstudio/impl/vs200x_solution.lua
index 05f873dcb..d740073b7 100644
--- a/xmake/plugins/project/vstudio/impl/vs200x_solution.lua
+++ b/xmake/plugins/project/vstudio/impl/vs200x_solution.lua
@@ -21,6 +21,7 @@
-- imports
import("core.project.project")
import("vsfile")
+import("plugins.project.utils.target_utils", {rootdir = os.programdir()})
-- make header
function _make_header(slnfile, vsinfo)
@@ -35,7 +36,8 @@ function _make_projects(slnfile, vsinfo)
local vctool = "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942"
-- make all targets
- for targetname, target in pairs(project.targets()) do
+ local project_targets = target_utils.get_project_targets()
+ for targetname, target in pairs(project_targets) do
if not target:is_phony() then
-- enter project
@@ -67,7 +69,8 @@ function _make_global(slnfile, vsinfo)
-- add project configuration platforms
slnfile:enter("GlobalSection(ProjectConfigurationPlatforms) = postSolution")
- for targetname, target in pairs(project.targets()) do
+ local project_targets = target_utils.get_project_targets()
+ for targetname, target in pairs(project_targets) do
if not target:is_phony() then
slnfile:print("{%s}.$(mode)|Win32.ActiveCfg = $(mode)|Win32", hash.uuid4(targetname))
slnfile:print("{%s}.$(mode)|Win32.Build.0 = $(mode)|Win32", hash.uuid4(targetname))
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index a10b19d0a..1f3c55a93 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -40,6 +40,7 @@ import("private.action.run.runenvs")
import("actions.config.configfiles", {alias = "generate_configfiles", rootdir = os.programdir()})
import("private.utils.batchcmds")
import("plugins.project.utils.target_cmds", {rootdir = os.programdir()})
+import("plugins.project.utils.target_utils", {rootdir = os.programdir()})
function _translate_path(dir, vcxprojdir)
if dir == nil then
@@ -436,7 +437,8 @@ function make(outputdir, vsinfo)
os.cd(project.directory())
-- save targets
- for targetname, target in table.orderpairs(project.targets()) do
+ local project_targets = target_utils.get_project_targets()
+ for targetname, target in table.orderpairs(project_targets) do
-- make target with the given mode and arch
targets[targetname] = targets[targetname] or {}
diff --git a/xmake/plugins/project/vstudio/impl/vs201x_solution.lua b/xmake/plugins/project/vstudio/impl/vs201x_solution.lua
index d4a16c207..74fb963fa 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x_solution.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x_solution.lua
@@ -22,6 +22,7 @@
import("core.project.project")
import("vsfile")
import("vsutils")
+import("plugins.project.utils.target_utils", {rootdir = os.programdir()})
-- make header
function _make_header(slnfile, vsinfo)
@@ -36,7 +37,8 @@ function _make_projects(slnfile, vsinfo)
local groups = {}
local targets = {}
local vctool = "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942"
- for targetname, target in table.orderpairs(project.targets()) do
+ local project_targets = target_utils.get_project_targets()
+ for targetname, target in table.orderpairs(project_targets) do
-- we need to set startup project for default or binary target
-- @see https://github.com/xmake-io/xmake/issues/1249
if target:get("default") == true then
@@ -99,7 +101,8 @@ function _make_global(slnfile, vsinfo)
-- add project configuration platforms
slnfile:enter("GlobalSection(ProjectConfigurationPlatforms) = postSolution")
- for targetname, target in table.orderpairs(project.targets()) do
+ local project_targets = target_utils.get_project_targets()
+ for targetname, target in table.orderpairs(project_targets) do
for _, mode in ipairs(vsinfo.modes) do
for _, arch in ipairs(vsinfo.archs) do
local vs_arch = vsutils.vsarch(arch)
@@ -118,7 +121,7 @@ function _make_global(slnfile, vsinfo)
-- add project groups
slnfile:enter("GlobalSection(NestedProjects) = preSolution")
local subgroups = {}
- for targetname, target in table.orderpairs(project.targets()) do
+ for targetname, target in table.orderpairs(project_targets) do
local group_path = target:get("group")
if group_path then
-- target -> group