在批处理文件中指定VS宏以运行预构建或后构建操作

11

我可以在我的预/后构建事件中使用像$(ProjectDir)这样的VS宏。但是否有任何方法可以在批处理文件中指定它们并将批处理文件作为我的预/后构建事件运行?

例如:

之前

后构建事件

copy $(ProjectDir)foo.txt $(ProjectDir)\out\foo.txt

之后

构建后事件

CopyFoo.cmd

其中 CopyFoo.cmd 包含的内容为

copy $(ProjectDir)foo.txt $(ProjectDir)\out\foo.txt

我希望这样做可以使我的构建事件列表更易于编辑/更新。相比在 VS 中编辑构建事件框,编辑批处理文件要容易得多。

3个回答

18

不确定您是否可以访问它们(因为在批处理文件中,$ 具有不同的含义),但一种方法是将它们作为命令行参数传递给批处理文件。您可以在批处理文件内部通过 %0 - %9 访问它们。

构建后事件

CopyFoo.cmd $(ProjectDir)

批处理文件

copy %1foo.txt %1\out\foo.txt

虽然按照Mrchief的解决方案传递命令行参数到批处理文件是正确的方法,但我想补充一点,使用属性表将允许用户为所有相关项目提供相同的预/后构建事件。https://msdn.microsoft.com/en-us/library/windows/desktop/bb774540(v=vs.85).aspx - John Bargman

1
与最被接受的结果相比,我提供了一种更直观的方式,尤其是当您有许多要使用的宏时。 构建后事件
set ENV_ProjectDir=$(ProjectDir)
call CopyFoo.cmd

CopyFoo.cmd

copy %ENV_ProjectDir%\foo.txt %ENV_ProjectDir%\out\foo.txt

注:

  • (VS2022) 我尝试使用“set ProjectDir=$(ProjectDir)”命名,但是对于我的C#项目会导致一些奇怪的构建错误。最好避免使用这个命名。
  • (VS2022) Pre-Build事件和Post-Build事件环境变量是分开的。似乎你不能在Pre-Build中定义并在Post-Build中使用。

0

你尝试过在外部编辑器中编写命令,然后将结果复制到预/后构建事件框中吗?创建 .cmd 文件并传递参数听起来更加复杂。


3
在我的情况下,批处理文件可以避免我在50个项目中都需要相同的脚本,并且当我需要进行微调时不必在所有50个项目中都修改。 - Mafu Josh
你考虑过使用属性页来解决那个任务吗? - John Bargman
嗨@JohnBargman,我非常想了解有关属性表格方法替代BAT文件的更多信息。你能给我指一个例子吗?谢谢。 - Sau001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接