summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/cmake/cmakelists.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-14 22:08:03 +0800
committerruki <[email protected]>2022-08-14 22:08:03 +0800
commitfcebe80886634ed74bbd1600f175287596528c7f (patch)
tree701b16f4a9780a621d16519a6574a3af6dadcf9d /xmake/plugins/project/cmake/cmakelists.lua
parentd9e3a62bdd4b6390318e0cdebccfe96562c4ef12 (diff)
add objs to cmake link
Diffstat (limited to 'xmake/plugins/project/cmake/cmakelists.lua')
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua23
1 files changed, 21 insertions, 2 deletions
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index 153e3c4ad..16c73e946 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -713,7 +713,7 @@ function _add_target_vs_runtime(cmakelists, target)
end
-- add target link libraries
-function _add_target_link_libraries(cmakelists, target)
+function _add_target_link_libraries(cmakelists, target, outputdir)
-- add links
local links = _get_configs_from_target(target, "links")
@@ -732,6 +732,25 @@ function _add_target_link_libraries(cmakelists, target)
end
cmakelists:print(")")
end
+
+ -- add other object files, maybe from custom rules
+ local objectfiles_set = hashset.new()
+ for _, sourcebatch in table.orderpairs(target:sourcebatches()) do
+ if _sourcebatch_is_built(sourcebatch) then
+ for _, objectfile in ipairs(sourcebatch.objectfiles) do
+ objectfiles_set:insert(objectfile)
+ end
+ end
+ end
+ if #target:objectfiles() > objectfiles_set:size() then
+ cmakelists:print("target_link_libraries(%s PRIVATE", target:name())
+ for _, objectfile in ipairs(target:objectfiles()) do
+ if not objectfiles_set:has(objectfile) then
+ cmakelists:print(" " .. _get_unix_path_relative_to_cmake(objectfile, outputdir))
+ end
+ end
+ cmakelists:print(")")
+ end
end
-- add target link directories
@@ -1013,7 +1032,7 @@ function _add_target(cmakelists, target, outputdir)
_add_target_vs_runtime(cmakelists, target)
-- add target link libraries
- _add_target_link_libraries(cmakelists, target)
+ _add_target_link_libraries(cmakelists, target, outputdir)
-- add target link directories
_add_target_link_directories(cmakelists, target, outputdir)