Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用make调用批处理文件并使更改持久化 我用MaxFrm(GNU make)在命令行上用VisualC++语言编程。 为了实现这一点,我必须调用Visual Studio批处理文件vsvars32.bat来设置环境。在使用make之前,每次打开新的cmd.exe时都必须执行此操作。 当我试图从makefile调用批处理文件时,它显然会按如下方式执行批处理文件: 一个自己的过程,因为之后的环境是相同的_Windows_Batch File_Makefile - Fatal编程技术网

Windows 使用make调用批处理文件并使更改持久化 我用MaxFrm(GNU make)在命令行上用VisualC++语言编程。 为了实现这一点,我必须调用Visual Studio批处理文件vsvars32.bat来设置环境。在使用make之前,每次打开新的cmd.exe时都必须执行此操作。 当我试图从makefile调用批处理文件时,它显然会按如下方式执行批处理文件: 一个自己的过程,因为之后的环境是相同的

Windows 使用make调用批处理文件并使更改持久化 我用MaxFrm(GNU make)在命令行上用VisualC++语言编程。 为了实现这一点,我必须调用Visual Studio批处理文件vsvars32.bat来设置环境。在使用make之前,每次打开新的cmd.exe时都必须执行此操作。 当我试图从makefile调用批处理文件时,它显然会按如下方式执行批处理文件: 一个自己的过程,因为之后的环境是相同的,windows,batch-file,makefile,Windows,Batch File,Makefile,所以我的问题是:有没有一种方法可以像Linux/Unix bash的内置源代码命令那样在cmd.exe中执行脚本?当然,除了在Windows上安装bash之外 发布我自己的答案后编辑: 上面的问题不太对,应该是这样的: 是否可以从makefile中调用环境更改批处理文件,以便在makefile中调用的其他程序中保持更改的环境 原始问题的答案是肯定的:您可以使用cmd.exe的内置call命令。但由于call是一个内置命令,而不是真正的程序,所以它在makefile中不起作用,只有当您从另一个批处

所以我的问题是:有没有一种方法可以像Linux/Unix bash的内置源代码命令那样在cmd.exe中执行脚本?当然,除了在Windows上安装bash之外

发布我自己的答案后编辑:

上面的问题不太对,应该是这样的:

是否可以从makefile中调用环境更改批处理文件,以便在makefile中调用的其他程序中保持更改的环境

原始问题的答案是肯定的:您可以使用cmd.exe的内置call命令。但由于call是一个内置命令,而不是真正的程序,所以它在makefile中不起作用,只有当您从另一个批处理文件调用批处理文件时才起作用。

使用“call”:

@echo off
pushd.
call "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars3235.bat"
msbuild LinqSupportClassesSDKBuild.csproj /t:rebuild /p:Configuration=Release /nologo /v:q /clp:ErrorsOnly;
popd

这是我们用来构建linq提供程序的cmd文件

至少在我安装的Visual Studio中(尽管有点古老的VS.NET 2003),VS“开始”菜单组中的一个链接是打开环境已设置的cmd.exe实例。您可能会发现以下内容很有帮助:


它们更倾向于从IDE启动命令提示符,但它们确实包含了有关使用适当环境启动命令提示符的信息,您可能会发现这些信息对您的目的很有帮助。

如何启动控制台?如果您只是启动“cmd”,请创建一个执行的快捷方式(%comspec%解析为c:\windows\cmd.exe或系统上的任何相关内容)

显然,更改路径以指向正确的安装文件夹。 更一般地说,正如上面的海报所指出的,如果一个.cmd文件需要处理另一个.cmd文件,而不是作为单独的进程启动它,请使用“call”批处理命令。

将GNU make包装在脚本中(mmake.bat)。将脚本放在路径中的某个位置

脚本本身应该运行vsvars32.bat,然后像这样

vsvars32.bat
make %*

据我记忆所及,从另一个脚本调用脚本(类似于Bash“.”命令)是在同一个shell中完成的(类似于Bash“.”命令)。

根据前面的答案编译的答案:

我制作了一个名为make.bat的批处理文件,其中包含以下内容:

调用“%VS90COMNTOOLS%vsvars32.bat”
调用make.exe%*

这就行了。 但是,从makefile中调用环境更改批处理文件,以便更改的环境对makefile中调用的其他程序保持不变,这似乎是不可能的

编辑:在通过反复调用vsvars32.bat使路径变量溢出后,我做了以下更改:

如果不是“%VisualVars%”,则为“TRUE”(
设置VisualVars=TRUE
调用“%VS90COMNTOOLS%vsvars32.bat”
)
调用make.exe%*


我找到了解决这个问题的三种方法:

1) 如果批处理文件设置的环境变量是静态的(即,它们始终是相同的值),请为整个用户配置文件设置这些值。右键单击我的计算机,单击属性-->高级-->环境变量。将批处理文件中的变量添加到用户变量或系统变量部分(用户变量仅对您可见,系统变量对该计算机的所有用户可见)

2) 编写一个包装批处理文件,调用环境设置脚本,然后调用Makefile


3) 不要使用SET命令在批处理文件中设置环境变量,而是使用SETX命令(需要Windows资源工具包)。SETX与SET类似,只是它在注册表中对主环境进行更改,并将在将来启动的所有命令提示(但不是当前命令提示)中生效。

谢谢。我想了想,但不知道%*。但是你必须在命令前使用调用。
vsvars32.bat
make %*