我关注了 Scott Hanselman 的一篇博客文章,用于管理 PreBuild Events 的配置,并让它正常工作。
我现在想将我的配置拆分为几个不同的文件,因此需要在构建之前再次执行命令。问题是 PreBuild 事件文本都作为一个控制台命令执行。如何将其拆分为多个命令?
我关注了 Scott Hanselman 的一篇博客文章,用于管理 PreBuild Events 的配置,并让它正常工作。
我现在想将我的配置拆分为几个不同的文件,因此需要在构建之前再次执行命令。问题是 PreBuild 事件文本都作为一个控制台命令执行。如何将其拆分为多个命令?
原来问题是斯科特的例子不包括行首的call
命令。只要您不想.bat
使用不同的参数多次执行文件,这很好。
这:
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config"
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config"
对我来说很好。
我在 Windows 7 64 位上使用 Visual Studio 2010。
我找到了一个更适合我的解决方案,我将命令链接在一起&& ^
,例如,编辑我的 .vcxproj xml 文件,如下所示:
<PreBuildEvent>
<Command>echo "hello 1" && ^
echo "hello 2" && ^
echo "hello 3"</Command>
<Message>Performaing pre-build actions ...</Message>
</PreBuildEvent>
我将三个命令链接在一起。如果前面的命令出错,'&&' 告诉 shell 停止执行。
注意,在.xml文件中,不能&&
直接使用,所以'&&' 必须改为使用。还要注意^
字符的使用,这是 cmd shell 的续行字符(如 BASH 的\
char)。
每个新命令必须从行首开始。使用这种方法,可以链接任意数量的命令,但如果有任何失败,则链中的其余命令将不会被执行。
这是我的实际用例,我正在使用 Python 脚本执行一些环境检查,然后将预编译的头文件的调试文件复制到另一个子项目的目录:
<PreBuildEvent>
<Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 && ^
copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command>
<Message>Performaing pre-build actions ...</Message>
</PreBuildEvent>
复制命令的 > nul
使用可以防止任何输出出现在构建窗口中,所以当它说时我的队友不会被吓坏0 file(s) copied.
在子项目之间共享预编译头的参考在这里:
您应该能够将命令放在单独的行上,然后每个命令将按顺序执行。或者,做同样事情的“骗子”方法如下: