use*_*185 25 cygwin visual-c++
我大量使用Cygwin(使用PuTTY shell).但是,cl.exe在Cygwin Bash shell中调用(即Visual C++编译器工具链)非常棘手.vcvars*.bat在Bash shell中运行显然不起作用.我试图将VC++的环境变量迁移到Cygwin,但这并不容易.
如何在Cygwin的Bash shell中运行VC++编译器?
Jes*_*erE 25
我通常通过添加来解决这个问题
call "%VS80COMNTOOLS%vsvars32.bat" >NUL:
Run Code Online (Sandbox Code Playgroud)
到c:/cygwin/cygwin.bat.请注意,VS80COMNTOOLS变量非常有用,因为它为您提供了一种简单的(hm)方式来定位vsvars32.bat.
另一种方法是,它允许您在不同的Studio版本之间轻松切换:
function run_with_bat()
{
batfile=$1; shift
tmpfile="$TMP/tmp$$.bat"
echo "@echo off" > $tmpfile
echo "call \"%$batfile%vsvars32.bat\" >NUL:" >> $tmpfile
echo "bash -c \"%*\"" >> $tmpfile
cmd /c `cygpath -m "$tmpfile"` "$@"
status=$?
rm -f $tmpfile
return $status
}
function run_vs9()
{
run_with_bat VS90COMNTOOLS "$@"
}
function run_vs8()
{
run_with_bat VS80COMNTOOLS "$@"
}
Run Code Online (Sandbox Code Playgroud)
你现在可以这样做:
$ run_vs8 cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
$ run_vs9 cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Run Code Online (Sandbox Code Playgroud)
请注意编译器版本.
Dio*_*lis 13
我知道您的问题是将vcvars32.bat转换为shell脚本.
解决该问题的一种方法是基于这样的想法:当一个进程启动另一个进程时,环境变量将被继承.所以你可以在cmd下运行vcvars32,然后运行bash.这在我的机器上工作正常:
sh-3.2$ cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Run Code Online (Sandbox Code Playgroud)
或者,在cmd下调用vcvars32之前和之后运行set,然后创建一个shell脚本来设置环境变量.
Bro*_*ses 12
根据其他答案中的建议,我使用和不使用MSVC变量进行了bash"set"结果的差异,并提出了以下脚本来重现它们以安装Microsoft Visual C++ 2010 Express.我已经重构了一下,将所有依赖于安装的部分放在顶部,所以希望这对其他人有用.
# These lines will be installation-dependent.
export VSINSTALLDIR='C:\Program Files\Microsoft Visual Studio 10.0\'
export WindowsSdkDir='C:\Program Files\Microsoft SDKs\Windows\v7.0A\'
export FrameworkDir='C:\WINDOWS\Microsoft.NET\Framework\'
export FrameworkVersion=v4.0.30319
export Framework35Version=v3.5
# The following should be largely installation-independent.
export VCINSTALLDIR="$VSINSTALLDIR"'VC\'
export DevEnvDir="$VSINSTALLDIR"'Common7\IDE\'
export FrameworkDIR32="$FrameworkDir"
export FrameworkVersion32="$FrameworkVersion"
export INCLUDE="${VCINSTALLDIR}INCLUDE;${WindowsSdkDir}include;"
export LIB="${VCINSTALLDIR}LIB;${WindowsSdkDir}lib;"
export LIBPATH="${FrameworkDir}${FrameworkVersion};"
export LIBPATH="${LIBPATH}${FrameworkDir}${Framework35Version};"
export LIBPATH="${LIBPATH}${VCINSTALLDIR}LIB;"
c_VSINSTALLDIR=`cygpath -ua "$VSINSTALLDIR\\\\"`
c_WindowsSdkDir=`cygpath -ua "$WindowsSdkDir\\\\"`
c_FrameworkDir=`cygpath -ua "$FrameworkDir\\\\"`
export PATH="${c_WindowsSdkDir}bin:$PATH"
export PATH="${c_WindowsSdkDir}bin/NETFX 4.0 Tools:$PATH"
export PATH="${c_VSINSTALLDIR}VC/VCPackages:$PATH"
export PATH="${c_FrameworkDir}${Framework35Version}:$PATH"
export PATH="${c_FrameworkDir}${FrameworkVersion}:$PATH"
export PATH="${c_VSINSTALLDIR}Common7/Tools:$PATH"
export PATH="${c_VSINSTALLDIR}VC/BIN:$PATH"
export PATH="${c_VSINSTALLDIR}Common7/IDE/:$PATH"
Run Code Online (Sandbox Code Playgroud)
我实际上使用了JesperE的答案/sf/answers/26208801/(允许你在VS版本之间切换)但是找到了一种不创建临时bat文件的方法.所以结果要简单得多.
function run_in_vs_env
{
eval vssetup="\$$1\\vsvars32.bat"
cmd /Q /C call "$vssetup" "&&" "${@:2}"
}
function run_vs11
{
run_in_vs_env VS110COMNTOOLS "$@"
}
function run_vs10
{
run_in_vs_env VS100COMNTOOLS "$@"
}
Run Code Online (Sandbox Code Playgroud)
我建议将这些行添加到.bash_functions或类似的东西中,然后在那里导出这些函数.这将允许您使用bash脚本中的函数.
export -f run_in_vs_env
export -f run_vs11
export -f run_vs10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35652 次 |
| 最近记录: |