summaryrefslogtreecommitdiff
path: root/xmake
diff options
context:
space:
mode:
authorruki <[email protected]>2020-03-14 12:51:00 +0800
committerruki <[email protected]>2020-03-14 12:51:00 +0800
commit31e29aff46694de65721781f8e5085d3a4041ea9 (patch)
tree1cf979c6bf025b301f47febe90b9f9bcea956ede /xmake
parent53c89b38d5b41c199e1431184e96235566c6dcc4 (diff)
fix repeat objectfiles
Diffstat (limited to 'xmake')
-rw-r--r--xmake/core/project/target.lua15
1 files changed, 11 insertions, 4 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index cb486a025..c6dca9f94 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -1069,22 +1069,29 @@ function _instance:objectfiles()
-- get object files from source batches
local objectfiles = {}
+ local batchcount = 0
for _, sourcebatch in pairs(self:sourcebatches()) do
table.join2(objectfiles, sourcebatch.objectfiles)
+ batchcount = batchcount + 1
end
+ -- some object files may be repeat and appear link errors if multi-batches exists, so we need remove all repeat object files
+ -- e.g. add_files("src/*.c", {rules = {"rule1", "rule2"}})
+ local remove_repeat = batchcount > 1
+
-- get object files from all dependent targets (object kind)
if self:orderdeps() then
- local remove_repeat = false
for _, dep in ipairs(self:orderdeps()) do
if dep:targetkind() == "object" then
table.join2(objectfiles, dep:objectfiles())
remove_repeat = true
end
end
- if remove_repeat then
- objectfiles = table.unique(objectfiles)
- end
+ end
+
+ -- remove repeat object files
+ if remove_repeat then
+ objectfiles = table.unique(objectfiles)
end
-- cache it