diff options
| author | ruki <[email protected]> | 2017-07-13 14:06:43 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-07-13 14:06:43 +0800 |
| commit | 73ed3035706e0e7e4891bcee9e351cc3c819b34a (patch) | |
| tree | 7db5b6603c59f6b33928debd0e602397069c14d1 | |
| parent | b7ae88c507b9afe89cd677ee81894e44a961a4b4 (diff) | |
fix vs201x project and cl script
| -rw-r--r-- | xmake/modules/core/tools/cl.lua | 3 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs200x_vcproj.lua | 12 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x.lua | 4 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua | 36 |
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 " => " flags = flags:gsub("\"", """) @@ -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 " => " flags = flags:gsub("\"", """) 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 |
