summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/cmake/cmakelists.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2020-03-19 00:42:28 +0800
committerruki <[email protected]>2020-03-18 22:14:48 +0800
commit030d02afb2e6a9651ba85713159defd0d66a36e2 (patch)
tree775602e9d19dee2747fa82b1e0aa2f85ae6cd641 /xmake/plugins/project/cmake/cmakelists.lua
parent304d2b4166fdc57b40a5ed7b164a82c8f3610665 (diff)
improve to generate cmakelists
Diffstat (limited to 'xmake/plugins/project/cmake/cmakelists.lua')
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua19
1 files changed, 19 insertions, 0 deletions
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index ca54659c8..2ea5f997b 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -34,6 +34,19 @@ function _add_values_from_targetopts(values, target, name)
end
end
+-- add values from target dependencies
+function _add_values_from_targetdeps(values, target, name)
+ local orderdeps = target:orderdeps()
+ local total = #orderdeps
+ for idx, _ in ipairs(orderdeps) do
+ local dep = orderdeps[total + 1 - idx]
+ local depinherit = target:extraconf("deps", dep:name(), "inherit")
+ if depinherit == nil or depinherit then
+ table.join2(values, dep:get(name, {interface = true}))
+ end
+ end
+end
+
-- add values from target packages
function _add_values_from_targetpkgs(values, target, name)
for _, pkg in ipairs(target:orderpkgs()) do
@@ -130,6 +143,7 @@ function _add_target_include_directories(cmakelists, target)
local includedirs = table.wrap(target:get("includedirs"))
_add_values_from_targetopts(includedirs, target, "includedirs")
_add_values_from_targetpkgs(includedirs, target, "includedirs")
+ _add_values_from_targetdeps(includedirs, target, "includedirs")
if #includedirs > 0 then
cmakelists:print("target_include_directories(%s PRIVATE", target:name())
for _, includedir in ipairs(includedirs) do
@@ -167,6 +181,7 @@ function _add_target_compile_definitions(cmakelists, target)
local defines = table.wrap(target:get("defines"))
_add_values_from_targetopts(defines, target, "defines")
_add_values_from_targetpkgs(defines, target, "defines")
+ _add_values_from_targetdeps(defines, target, "defines")
if #defines > 0 then
cmakelists:print("target_compile_definitions(%s PRIVATE", target:name())
for _, define in ipairs(defines) do
@@ -325,6 +340,9 @@ function _add_target_link_libraries(cmakelists, target)
-- add links from target packages
_add_values_from_targetpkgs(links, target, "links")
+ -- add links from targe dependencies
+ _add_values_from_targetdeps(links, target, "links")
+
-- add links from target deps
local targetkind = target:targetkind()
if targetkind == "binary" or targetkind == "shared" then
@@ -350,6 +368,7 @@ function _add_target_link_directories(cmakelists, target)
local linkdirs = table.wrap(target:get("linkdirs"))
_add_values_from_targetopts(linkdirs, target, "linkdirs")
_add_values_from_targetpkgs(linkdirs, target, "linkdirs")
+ _add_values_from_targetdeps(linkdirs, target, "linkdirs")
if #linkdirs > 0 then
cmakelists:print("target_link_directories(%s PRIVATE", target:name())
for _, linkdir in ipairs(linkdirs) do