.cmd
脚本如何从 Visual Studio(分别为 2005、2008、2010、2012 和 2013)项目的预链接阶段确定这是否是完全重建( Build.RebuildSolution
/Build.RebuildOnlyProject
) 或“普通”构建 (Build.BuildSolution
/Build.BuildOnlyProject
)?
这是一个外部脚本(LuaJIT,如果您必须知道的话),我不想在每次构建项目时都重建库。相反,我想将完全重建限制在我完全选择该选项的情况下。
最佳答案
How can a
.cmd
script run from within a Visual Studio (2005, 2008, 2010, 2012 and 2013 respectively) project's pre-link stage determine whether this is a full rebuild ... or "ordinary" build ... ?
我不知道您所要求的确切事情是否可以完成 - 也许其他人知道如何去做。不过,我会建议另一种方法。
我的方法是从预链接步骤中删除 Lua 库的构建到单独的 Visual Studio NMake 项目。如果您创建一个 NMake 项目,您将能够知道正在发生哪种类型的构建(build 或 rebuild)。
请注意,更高版本的 Visual Studio 仅将项目类型称为“Make”。出于此处讨论的目的,我将项目类型称为“NMake”。我相信这只是命名差异,两个版本之间的基础构建项目保持不变。
作为一个简单的测试,我创建了两个 Visual Studio 应用程序:1) 一个调用批处理文件来创建静态库的 NMake 项目,以及 2) 一个使用步骤 1 中的库的控制台应用程序。
NMake 项目
在 Visual Studio 中,如果您创建一个新的 NMake 项目,您将看到一个允许您提供 MS-DOS 命令的对话框:
如您所见,有以下命令:构建、清理、重建等。我的命令没有上述对话框的屏幕截图,但这是我的 NMake 项目的属性:
我的构建命令只检查输出文件 (lua.lib) 是否存在。如果不存在,则调用 rebuild.bat 批处理文件。我的重建命令总是调用批处理文件。我的 Clean 命令只是删除输出。我不太确定 Output 命令的用途,但我只是填写了构建输出 (lua.lib) 的路径。
现在,如果您进行构建,只有当 lua.lib 文件不存在时才会创建它。如果它已经存在,则什么都不做。如果您进行重建,则会创建一个新的 lua.lib 文件。
控制台应用程序
在我的控制台应用程序中,我添加了对 NMake 项目的引用 - 这样 NMake 项目就先于构建到控制台应用程序。这是控制台应用程序的引用页:
我还在应用程序的链接阶段添加了 lua.lib 文件作为输入:
构建控制台应用程序时(在构建过程中),它将根据需要构建 NMake 项目,并在链接器阶段使用输出 (lua.lib)。当控制台应用程序重建时(在重建期间),它也会重建 NMake 项目。
其他想法
我上面的屏幕截图只显示了属性的调试版本。您的项目将必须考虑发布版本。可能有一个 VS 宏来处理这个问题,但我不确定,因为我已经很久没有用 C/C++ 做过任何事情了。
在我上面的测试中,我对构建和重建都使用了一个构建批处理文件。显然,您可以执行相同的操作,也可以使用不同的批处理文件。
关于visual-studio - 确定它是在 Visual Studio 中的预链接步骤中调用的 .cmd 脚本中的构建还是重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085613/