summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-07-13 14:06:43 +0800
committerruki <[email protected]>2017-07-13 14:06:43 +0800
commit73ed3035706e0e7e4891bcee9e351cc3c819b34a (patch)
tree7db5b6603c59f6b33928debd0e602397069c14d1
parentb7ae88c507b9afe89cd677ee81894e44a961a4b4 (diff)
fix vs201x project and cl script
-rw-r--r--xmake/modules/core/tools/cl.lua3
-rw-r--r--xmake/plugins/project/vstudio/impl/vs200x_vcproj.lua12
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua4
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua36
4 files changed, 23 insertions, 32 deletions
diff --git a/xmake/modules/core/tools/cl.lua b/xmake/modules/core/tools/cl.lua
index 542469c5b..300ab8be9 100644
--- a/xmake/modules/core/tools/cl.lua
+++ b/xmake/modules/core/tools/cl.lua
@@ -211,7 +211,8 @@ function _compile1(self, sourcefile, objectfile, incdepfile, flags)
-- generate includes file
if incdepfile then
- flags = (flags or "") .. " -showIncludes"
+ flags = flags or {}
+ table.insert(flags, "-showIncludes")
end
-- compile it
diff --git a/xmake/plugins/project/vstudio/impl/vs200x_vcproj.lua b/xmake/plugins/project/vstudio/impl/vs200x_vcproj.lua
index 3fe67bf45..102ab8399 100644
--- a/xmake/plugins/project/vstudio/impl/vs200x_vcproj.lua
+++ b/xmake/plugins/project/vstudio/impl/vs200x_vcproj.lua
@@ -32,7 +32,7 @@ import("vsfile")
function _make_compflags(sourcefile, target, vcprojdir)
-- make the compiling flags
- local _, compflags = compiler.compflags(sourcefile, {target = target})
+ local compflags = compiler.compflags(sourcefile, {target = target})
-- replace -Idir or /Idir, -Fdsymbol.pdb or /Fdsymbol.pdb
local flags = {}
@@ -60,8 +60,8 @@ function _make_compflags(sourcefile, target, vcprojdir)
table.insert(flags, flag)
end
- -- concat flags
- flags = table.concat(flags, " "):trim()
+ -- make flags string
+ flags = os.args(flags)
-- replace " => &quot;
flags = flags:gsub("\"", "&quot;")
@@ -74,7 +74,7 @@ end
function _make_linkflags(target, vcprojdir)
-- make the linking flags
- local _, linkflags = linker.linkflags(target:get("kind"), target:sourcekinds(), {target = target})
+ local linkflags = linker.linkflags(target:get("kind"), target:sourcekinds(), {target = target})
-- replace -libpath:dir or /libpath:dir, -pdb:symbol.pdb or /pdb:symbol.pdb
local flags = {}
@@ -102,8 +102,8 @@ function _make_linkflags(target, vcprojdir)
table.insert(flags, flag)
end
- -- concat flags
- flags = table.concat(flags, " "):trim()
+ -- make flags string
+ flags = os.args(flags)
-- replace " => &quot;
flags = flags:gsub("\"", "&quot;")
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index 566c45470..935914c98 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -64,12 +64,12 @@ function _make_targetinfo(mode, arch, target)
-- save compiler flags
targetinfo.compflags = {}
for _, sourcefile in ipairs(target:sourcefiles()) do
- local _, compflags = compiler.compflags(sourcefile, {target = target})
+ local compflags = compiler.compflags(sourcefile, {target = target})
targetinfo.compflags[sourcefile] = compflags
end
-- save linker flags
- local _, linkflags = linker.linkflags(target:get("kind"), target:sourcekinds(), {target = target})
+ local linkflags = linker.linkflags(target:get("kind"), target:sourcekinds(), {target = target})
targetinfo.linkflags = linkflags
-- ok
diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
index 2972e5562..2bc68af20 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
@@ -42,15 +42,6 @@ function _make_compflags(sourcefile, targetinfo, vcxprojdir)
return "/I" .. dir
end)
- -- -Fdsymbol.pdb or /Fdsymbol.pdb
- flag = flag:gsub("[%-|/]Fd(.*)", function (dir)
- dir = dir:trim()
- if not path.is_absolute(dir) then
- dir = path.relative(path.absolute(dir), vcxprojdir)
- end
- return "/Fd" .. dir
- end)
-
-- save flag
table.insert(flags, flag)
end
@@ -224,7 +215,7 @@ function _make_source_options(vcxprojfile, flags, condition)
condition = condition or ""
-- get flags string
- local flagstr = table.concat(flags, " ")
+ local flagstr = os.args(flags)
-- make Optimization
if flagstr:find("[%-|/]Os") or flagstr:find("[%-|/]O1") then
@@ -282,7 +273,7 @@ function _make_source_options(vcxprojfile, flags, condition)
-- make AdditionalOptions
local additional_flags = {}
- local excludes = {"Os", "O0", "O1", "O2", "Ot", "Ox", "W0", "W1", "W2", "W3", "WX", "Wall", "Zi", "ZI", "Z7", "MT", "MTd", "MD", "MDd", "TP"}
+ local excludes = {"Os", "O0", "O1", "O2", "Ot", "Ox", "W0", "W1", "W2", "W3", "WX", "Wall", "Zi", "ZI", "Z7", "MT", "MTd", "MD", "MDd", "TP", "Fd"}
for _, flag in ipairs(flags) do
local excluded = false
for _, exclude in ipairs(excludes) do
@@ -296,7 +287,7 @@ function _make_source_options(vcxprojfile, flags, condition)
end
end
if #additional_flags > 0 then
- vcxprojfile:print("<AdditionalOptions%s>%s %%(AdditionalOptions)</AdditionalOptions>", condition, table.concat(additional_flags, " "):trim())
+ vcxprojfile:print("<AdditionalOptions%s>%s %%(AdditionalOptions)</AdditionalOptions>", condition, os.args(additional_flags))
end
end
@@ -318,16 +309,15 @@ function _make_common_item(vcxprojfile, vsinfo, targetinfo, vcxprojdir)
vcxprojfile:enter("<%s>", linkerkinds[targetinfo.targetkind])
-- make linker flags
- local flags = table.concat(_make_linkflags(targetinfo, vcxprojdir), " "):trim()
-
- -- remove "-machine:[x86|x64]"
- flags = flags:gsub("[%-/]machine:%w+", "")
-
- -- remove "-pdb:*.pdb"
- flags = flags:gsub("[%-/]pdb:.+%.pdb", "")
+ local flags = {}
+ for _, flag in ipairs(_make_linkflags(targetinfo, vcxprojdir)) do
- -- remove "-debug"
- flags = flags:gsub("[%-/]debug", "")
+ -- remove "-machine:[x86|x64]", "-pdb:*.pdb" and "-debug"
+ if not flag:find("[%-/]machine:%w+") and not flag:find("[%-/]pdb:.+%.pdb") and not flag:find("[%-/]debug") then
+ table.insert(flags, flag)
+ end
+ end
+ flags = os.args(flags)
-- make AdditionalOptions
vcxprojfile:print("<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>", flags)
@@ -468,7 +458,7 @@ function _make_source_file_forall(vcxprojfile, vsinfo, sourcefile, sourceinfo, v
-- make AdditionalOptions
local mergeflags = {}
for _, info in ipairs(sourceinfo) do
- local flags = table.concat(info.flags, " "):trim()
+ local flags = os.args(info.flags)
if flags ~= "" then
mergeflags[flags] = mergeflags[flags] or {}
mergeflags[flags][info.mode .. '|' .. info.arch] = true
@@ -522,7 +512,7 @@ function _make_source_file_forspec(vcxprojfile, vsinfo, sourcefile, sourceinfo,
vcxprojfile:print("<ObjectFileName>%s</ObjectFileName>", path.relative(path.absolute(info.objectfile), vcxprojdir))
-- get source flags
- local flags = table.concat(info.flags, " "):trim()
+ local flags = os.args(info.flags)
-- make AdditionalOptions
if flags ~= "" then