diff options
| author | ruki <[email protected]> | 2021-05-21 22:50:20 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-05-21 22:50:20 +0800 |
| commit | 6eea080650bdf56d01384eb735f76a4aa56676f5 (patch) | |
| tree | 83d30f930fd2abb6bd5fa7af2e8bd92c5f0968a1 | |
| parent | f84775ba240e751cc266c5cccd0acbc18f3bae24 (diff) | |
add prefis, suffix and extension apis
| -rw-r--r-- | CHANGELOG.md | 8 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 56 | ||||
| -rw-r--r-- | xmake/rules/utils/inherit_links/inherit_links.lua | 2 |
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) |
