summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-12-13 00:47:51 +0800
committerruki <[email protected]>2022-12-12 22:48:03 +0800
commit89fbc5d5ad470b0ef92fabedaecb26b21f217e78 (patch)
treee09a62e88f0dba5cdb0c63e444c3de787a8fc20d
parent2347d4ab4bf5d9bb3e5a9f67423df51313553b7e (diff)
improve cmakelists
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua26
1 files changed, 25 insertions, 1 deletions
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index 0d273470c..a23a5646a 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -61,10 +61,29 @@ function _translate_path(filepath, outputdir)
end
end
+-- escape path
+function _escape_path(filepath)
+ if is_host("windows") then
+ filepath = filepath:gsub('\\', '/')
+ end
+ return filepath
+end
+
+-- escape path in flag
+-- @see https://github.com/xmake-io/xmake/issues/3161
+function _escape_path_in_flag(target, flag)
+ if is_host("windows") and target:has_tool("cc", "cl") then
+ -- e.g. /ManifestInput:xx, /def:xxx
+ if flag:find(":", 1, true) then
+ flag = _escape_path(flag)
+ end
+ end
+end
+
-- get unix path
function _get_unix_path(filepath, outputdir)
filepath = _translate_path(filepath, outputdir)
- filepath = path.translate(filepath):gsub('\\', '/')
+ filepath = _escape_path(path.translate(filepath))
return os.args(filepath)
end
@@ -524,16 +543,20 @@ function _add_target_compile_options(cmakelists, target, outputdir)
if #cflags > 0 or #cxflags > 0 or #cxxflags > 0 or #cuflags > 0 then
cmakelists:print("target_compile_options(%s PRIVATE", target:name())
for _, flag in ipairs(_translate_flags(cflags, outputdir)) do
+ flag = _escape_path_in_flag(target, flag)
cmakelists:print(" $<$<COMPILE_LANGUAGE:C>:" .. flag .. ">")
end
for _, flag in ipairs(_translate_flags(cxflags, outputdir)) do
+ flag = _escape_path_in_flag(target, flag)
cmakelists:print(" $<$<COMPILE_LANGUAGE:C>:" .. flag .. ">")
cmakelists:print(" $<$<COMPILE_LANGUAGE:CXX>:" .. flag .. ">")
end
for _, flag in ipairs(_translate_flags(cxxflags, outputdir)) do
+ flag = _escape_path_in_flag(target, flag)
cmakelists:print(" $<$<COMPILE_LANGUAGE:CXX>:" .. flag .. ">")
end
for _, flag in ipairs(_translate_flags(cuflags, outputdir)) do
+ flag = _escape_path_in_flag(target, flag)
cmakelists:print(" $<$<COMPILE_LANGUAGE:CUDA>:" .. flag .. ">")
end
cmakelists:print(")")
@@ -794,6 +817,7 @@ function _add_target_link_options(cmakelists, target)
cmakelists:print("target_link_libraries(%s PRIVATE", target:name())
end
for _, flag in ipairs(flags) do
+ flag = _escape_path_in_flag(target, flag)
cmakelists:print(" " .. flag)
end
cmakelists:print(")")