summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-05-21 22:50:20 +0800
committerruki <[email protected]>2021-05-21 22:50:20 +0800
commit6eea080650bdf56d01384eb735f76a4aa56676f5 (patch)
tree83d30f930fd2abb6bd5fa7af2e8bd92c5f0968a1
parentf84775ba240e751cc266c5cccd0acbc18f3bae24 (diff)
add prefis, suffix and extension apis
-rw-r--r--CHANGELOG.md8
-rw-r--r--xmake/core/project/target.lua56
-rw-r--r--xmake/rules/utils/inherit_links/inherit_links.lua2
3 files changed, 59 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d18f46f47..b563b6447 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
## master (unreleased)
+### New features
+
+* [#1421](https://github.com/xmake-io/xmake/issues/1421): Add prefix, suffix and extension options for target names
+
### Bugs fixed
* [#1413](https://github.com/xmake-io/xmake/issues/1413): Fix hangs on fetching packages
@@ -996,6 +1000,10 @@
## master (开发中)
+### 新特性
+
+* [#1421](https://github.com/xmake-io/xmake/issues/1421): 针对 target 目标,增加目标文件名的前缀,后缀和扩展名设置接口。
+
### Bugs 修复
* [#1413](https://github.com/xmake-io/xmake/issues/1413): 修复查找包过程中出现的挂起卡死问题
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 49a3d6c4d..67e7e31f3 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -998,15 +998,36 @@ function _instance:filename()
-- make the target file name and attempt to use the format of linker first
local filename = self:get("filename")
if not filename then
- --[[
- local prefixname = self:get("prefixname") or ""
- local suffixname = self:get("suffixname") or ""
- ]]
- filename = target.filename(self:basename(), targetkind, {plat = self:plat(), arch = self:arch(), format = self:linker():format(targetkind)})
+ local prefixname = self:get("prefixname")
+ local suffixname = self:get("suffixname")
+ local extension = self:get("extension")
+ filename = target.filename(self:basename(), targetkind, {
+ plat = self:plat(), arch = self:arch(),
+ prefixname = prefixname,
+ suffixname = suffixname,
+ extension = extension,
+ format = self:linker():format(targetkind)})
end
return filename
end
+-- get the link name only for static/shared library
+function _instance:linkname()
+ if self:is_static() or self:is_shared() then
+ local filename = self:get("filename")
+ if filename then
+ return target.linkname(filename)
+ else
+ local linkname = self:basename()
+ local suffixname = self:get("suffixname")
+ if suffixname then
+ linkname = linkname .. suffixname
+ end
+ return linkname
+ end
+ end
+end
+
-- get the target file
function _instance:targetfile()
local filename = self:filename()
@@ -1884,6 +1905,7 @@ function target.apis()
, "target.set_symbols"
, "target.set_filename"
, "target.set_basename"
+ , "target.set_extension"
, "target.set_prefixname"
, "target.set_suffixname"
, "target.set_warnings"
@@ -1984,8 +2006,30 @@ function target.filename(targetname, targetkind, opt)
assert(targetname and targetkind)
-- make filename by format
+ local filename = targetname
local format = opt.format or platform.format(targetkind, opt.plat, opt.arch)
- return format and (format:gsub("%$%(name%)", targetname)) or targetname
+ if format then
+ local splitinfo = format:split("$(name)", {plain = true, strict = true})
+ local prefixname = splitinfo[1] or ""
+ local suffixname = ""
+ local extension = splitinfo[2] or ""
+ splitinfo = extension:split('.', {plain = true, limit = 2, strict = true})
+ if #splitinfo == 2 and splitinfo[1] ~= "" then
+ suffixname = splitinfo[1]
+ extension = "." .. splitinfo[2]
+ end
+ if opt.prefixname then
+ prefixname = opt.prefixname
+ end
+ if opt.suffixname then
+ suffixname = opt.suffixname
+ end
+ if opt.extension then
+ extension = opt.extension
+ end
+ filename = prefixname .. targetname .. suffixname .. extension
+ end
+ return filename
end
-- get the link name of the target file
diff --git a/xmake/rules/utils/inherit_links/inherit_links.lua b/xmake/rules/utils/inherit_links/inherit_links.lua
index 2a130aac0..f127481e8 100644
--- a/xmake/rules/utils/inherit_links/inherit_links.lua
+++ b/xmake/rules/utils/inherit_links/inherit_links.lua
@@ -40,7 +40,7 @@ function main(target)
local targetfile = target:targetfile()
-- we need move target link to head
- target:add("links", target:basename(), {interface = true})
+ target:add("links", target:linkname(), {interface = true})
local links = target:get("links", {rawref = true})
if links and type(links) == "table" and #links > 1 then
table.swap(links, 1, #links)