I'm trying to automatically build a (currently working) Visual Studio 2013 in cygwin so that I can automatically build my project and run it. My project is compiled using the VS2012 toolset.
I currently have this bash script running in cygwin (based off of this blog post: http://anthonykosky.blogspot.com/2013/10/making-visual-studio-solutions-cmake.html):
###### FIRST -- import the Visual Studio settings
export PATH=$PATH:"/cygdrive/C/Windows/system32"
CMD=/cygdrive/c/Windows/system32/cmd
${CMD} /c "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
# alias for MSBUILD
MSBUILD="/cygdrive/c/Program Files (x86)/MSBuild/12.0/Bin/MSBuild.exe"
# We're going to do a 64 bit release build
BUILD_CONFIG=Release
PLATFORM=x64
MSBUILD_LOG=msbuild.log
SLN_FILE=$1
"${MSBUILD}" ${SLN_FILE} /fl /property:Configuration=${BUILD_CONFIG};Platform=${PLATFORM}
msbuild_rv=$?
if [ ${msbuild_rv} != 0 ]
then
echo "MSBuild ${SLN_FILE} exited with status '${msbuild_rv}'"
exit 1
fi
grep -q '0 Error(s)' ${MSBUILD_LOG}
if [ $? != 0 ]
then
echo "MSBuild ${SLN_FILE} detected errors"
exit 1
fi
When it compiles, I get the repeated error that:
error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1800' in {file}.obj
This seems to be a mismatch between version 1800 (VS2013, which I'm creating the solution in) and 1700 (VS2012, the toolset I need to compile with).
I'm a bit confused why MSBuild isn't doing this right, because my solution is configured correctly in VS2013. What do I need to change in my build script to ensure that it compiles?
thanks!
Couple of things wrong here:
PlatformToolset
property in the project file), not by which vcvars file called on the commandline${CMD} /c ...
command does nothing for the script, the article you linked to is simply wrong: what it does is start a new process, execute the bat file, then terminate. Any environment variables set by the batch file are local to the process only, not to the calling process.msbuild <solution>
. vcvars sets up the PATH/INCLUDE/... variables so you can invoke the compiler manually on the commandline, but that is not what you are doing here: you are just building projects in which the PATH/INCLUDE/... is automatically determined by whichPlatformToolset
is usedSo to summarize all of the above: just calling msbuild on your solution should be ok, you do not need to call vcvars, and I don't know exactly why you get the linker error as you don't supply enough information to figure that out but the cause is not in the script: the linker error means you are mixing object files built with different toolsets. Possibly you need to do a rebuild. Just searching for mismatch detected for '_MSC_VER': value doesn't match value gives enough search hits.