summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-07-29 15:56:18 +0800
committerruki <[email protected]>2017-07-29 15:56:18 +0800
commit94f00ffc6d2e70316b8200f33ba6caeffce8674a (patch)
tree51e77a62590636c4019e852da7378818ddf288cd
parentcac0dd80b29ee923382442c274d37fb73589cb06 (diff)
support mode and arch for vs201x pch
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua6
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua14
2 files changed, 12 insertions, 8 deletions
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index 07ded3ce5..7b470e94e 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -47,6 +47,10 @@ function _make_targetinfo(mode, arch, target)
targetinfo.sdkver = (vcvarsall[arch] or {}).sdkver
end
+ -- save precompiled header file (.pch)
+ targetinfo.pcheaderfile = target:pcheaderfile()
+ target:set("precompiled_header", nil)
+
-- save symbols
targetinfo.symbols = target:get("symbols")
@@ -197,8 +201,6 @@ function make(outputdir, vsinfo)
local precompiled_header, precompiled_source = target:pcsourcefile()
_target.pcheader = precompiled_header -- header.h
_target.pcsourcefile = precompiled_source -- header.cpp
- _target.pcheaderfile = target:pcheaderfile() -- header.h.pch
- target:set("precompiled_header", nil)
-- init target info
_target.name = targetname
diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
index b5904209a..d302b1bf4 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
@@ -394,8 +394,8 @@ function _make_common_item(vcxprojfile, vsinfo, target, targetinfo, vcxprojdir)
-- make precompiled header and outputfile
vcxprojfile:print("<PrecompiledHeader>Use</PrecompiledHeader>")
vcxprojfile:print("<PrecompiledHeaderFile>%s</PrecompiledHeaderFile>", pcheader)
- if target.pcheaderfile then
- vcxprojfile:print("<PrecompiledHeaderOutputFile>%s</PrecompiledHeaderOutputFile>", path.relative(path.absolute(target.pcheaderfile), vcxprojdir))
+ if targetinfo.pcheaderfile then
+ vcxprojfile:print("<PrecompiledHeaderOutputFile>%s</PrecompiledHeaderOutputFile>", path.relative(path.absolute(targetinfo.pcheaderfile), vcxprojdir))
end
end
@@ -600,15 +600,17 @@ function _make_source_file_forspec(vcxprojfile, vsinfo, sourcefile, sourceinfo,
end
-- make source file for precompiled header
-function _make_source_file_forpch(vcxprojfile, vsinfo, pcsourcefile, pcheaderfile, vcxprojdir)
+function _make_source_file_forpch(vcxprojfile, vsinfo, pcsourcefile, targetinfo, vcxprojdir)
-- add precompiled source file
local sourcefile = path.relative(path.absolute(pcsourcefile), vcxprojdir)
- local objectfile = path.relative(path.absolute(pcheaderfile .. ".obj"), vcxprojdir)
vcxprojfile:enter("<ClCompile Include=\"%s\">", sourcefile)
vcxprojfile:print("<PrecompiledHeader>Create</PrecompiledHeader>")
- vcxprojfile:print("<ObjectFileName>%s</ObjectFileName>", objectfile)
vcxprojfile:print("<AdditionalOptions> %%(AdditionalOptions)</AdditionalOptions>")
+ for _, info in ipairs(targetinfo) do
+ local objectfile = path.relative(path.absolute(info.pcheaderfile .. ".obj"), vcxprojdir)
+ vcxprojfile:print("<ObjectFileName Condition=\"\'%$(Configuration)|%$(Platform)\'==\'%s|%s\'\">%s</ObjectFileName>", info.mode, info.arch, objectfile)
+ end
vcxprojfile:leave("</ClCompile>")
end
@@ -645,7 +647,7 @@ function _make_source_files(vcxprojfile, vsinfo, target, vcxprojdir)
-- make precompiled source file
if target.pcsourcefile then
- _make_source_file_forpch(vcxprojfile, vsinfo, target.pcsourcefile, target.pcheaderfile, vcxprojdir)
+ _make_source_file_forpch(vcxprojfile, vsinfo, target.pcsourcefile, target.info, vcxprojdir)
end
vcxprojfile:leave("</ItemGroup>")