.cmd
在 Visual Studio(分别为 2005、2008、2010、2012 和 2013)项目的预链接阶段中运行的脚本如何确定这是完全重建......还是“普通”构建......?
我不知道您所要求的确切事情是否可以完成 - 也许其他人知道该怎么做。但是,我会建议另一种方法。
我的方法是将 Lua 库的构建从预链接步骤中删除到单独的 Visual Studio NMake 项目。如果您创建一个 NMake 项目,您将能够知道正在发生哪种类型的构建(构建或重建)。
请注意,更高版本的 Visual Studio 仅将项目类型称为“Make”。出于讨论的目的,我将项目类型称为“NMake”。我相信这只是命名上的差异,两个版本之间的底层构建项目保持不变。
作为一个简单的测试,我创建了两个 Visual Studio 应用程序:1) 一个调用批处理文件以创建静态库的 NMake 项目,以及 2) 一个使用步骤 1 中的库的控制台应用程序。
NMake 项目
在 Visual Studio 中,如果您创建一个新的 NMake 项目,您将看到一个对话框,允许您提供 MS-DOS 命令:
如您所见,有以下命令:Build、Clean、Rebuild 等。我没有带有我的命令的上述对话框的屏幕截图,但这是我的 NMake 项目的属性:
我的构建命令只是检查输出文件(lua.lib)是否存在。如果它不存在,则调用rebuild.bat批处理文件。我的重建命令总是调用批处理文件。我的 Clean 命令只是删除输出。我不太确定输出命令的用途,但我只是填写了构建输出(lua.lib)的路径。
现在,如果您进行构建,则仅当 lua.lib 文件不存在时才会创建它。如果它已经存在,则什么也不做。如果您进行重建,则会创建一个新的 lua.lib 文件。
控制台应用程序
在我的控制台应用程序中,我添加了对 NMake 项目的引用 - 这样 NMake 项目就在控制台应用程序之前构建。这是控制台应用程序的参考页面:
我还在应用程序的链接阶段添加了 lua.lib 文件作为输入:
构建控制台应用程序时(在构建期间),如果需要,它将构建 NMake 项目,并在链接器阶段使用输出(lua.lib)。重新构建控制台应用程序时(在重新构建期间),它还将重新构建 NMake 项目。
其他想法
我上面的屏幕截图只显示了属性的调试版本。您的项目必须考虑发布版本。可能有一个 VS 宏来处理这个问题,但我不确定,因为自从我用 C/C++ 做任何事情以来已经很久了。
在上面的测试中,我使用单个构建批处理文件进行构建和重建。显然,您可以这样做,也可以使用不同的批处理文件。