如何在 Visual Studio 中正确设置我的后期生成脚本
How to correctly setup my post-build script in visual studio
所以我目前正在尝试使用Visual Studio build脚本从我的exe中构建一个.lib文件,正如这篇文章的公认答案所建议的那样:链接到多个.obj以进行单元测试控制台应用程序。基本上,他们建议放置在我的项目的构建后事件中的构建后脚本是:
lib /NOLOGO /OUT:"$(TargetPath).lib" "$(ProjectDir)$(Configuration)*.obj"
这是我当前的目录结构的样子:
-Solution
- Project
-Source
.cpp files
- ProjectTester
- Solution.sln
所以我的命令看起来像这样:
lib /NOLOGO /OUT:"$(TargetPath).lib" "$(ProjectDir)Source*.obj"
这目前什么都不做,好像Visual Studio完全忽略了这个构建脚本。我的问题是:
$(TargetPath).lib 究竟解析为什么?
和
我目前对此构建脚本的理解是否正确?如果是这样,如何更改此脚本以执行我想要的操作?
更新:
我在目标路径中更改了一些空格,现在出现LNK1146 no argument specified with option /OUT:
错误。
你没有提到你正在使用的Visual Studio版本。 从记忆中,答案没有太大变化,但我会回答Visual Studio 2015,因为这是我手边的东西。
浏览适用于所有 Visual Studio 版本的宏值的一种方法是使用ECHO
命令。 将生成后脚本更改为
echo TargetPath: "$(TargetPath)"
并且您应该能够在生成项目时在"输出"窗口中读取宏的值。 但是,在大多数现代版本的Visual Studio中,Echo
技巧应该是不必要的。
在"生成后事件"属性页中,单击">命令行"字段末尾的下拉列表,然后单击"<编辑...">. 在 Visual Studio 2015 中,随后的对话框将显示命令行和计算值,以便您可以看到展开宏的命令行。
还有宏>>按钮。 单击该按钮,您将获得一个对话框,其中显示每个宏名称及其值。 列表顶部的文本框允许您将结果筛选为包含字符序列的结果。
此处$(TargetPath)
描述为"生成主输出文件的绝对路径名(定义为驱动器 + 路径 + 基本名称 + 文件扩展名)"。这真正意味着">常规"属性页上">输出目录"、"目标名称">和"目标扩展"属性的值。
此处介绍了 LIB 工具。 若要获取有关 LIB 运行的详细信息,可以添加/VERBOSE 选项。 您也可以删除/NOLOGO 选项,以便至少确认您正在运行 LIB(并且运行正确版本的 LIB)。
很难说"什么都不做"的真正含义。 我猜最有可能的失败是正在创建 lib 文件 - 但不是在你期望的地方;或者 $(ProjectDir)\Source 中没有 obj 文件。
探索后一种情况的一种方法是将生成后事件更改为
dir "$(ProjectDir)Source*.obj"
然后检查生成输出以查看是否列出了 OBJ 文件。 如果目录中没有 .obj 文件,则输出窗口将显示类似于
1> Directory of C:TestProgramsvc.net.2015VCConsole
1>
1> File Not Found
和 错误列表 窗口将显示 dir 命令以代码 1 退出。
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- "configure"脚本如何检测我的系统是否支持某些头文件或 cpp 功能?
- 我似乎无法让他的 c++ 脚本在某一时刻不返回 0
- 如何在构建时改进我的脚本和复制程序资源?
- 我的 PowerShell 脚本无法按预期工作(用于编译C++文件)
- 如何从 bash 脚本捕获终端输出并将其显示在我的 Qt UI 中?
- 如何在我的C 脚本中修复运行时错误
- 如何将我的 cli 信息(变量等)共享到子进程,这是一个 bash shell 脚本
- 如何在 Visual Studio 中正确设置我的后期生成脚本
- C 我的脚本有什么问题
- 自动工具不喜欢我的项目目录中的 install.sh 脚本
- 运行我的SFML脚本的问题
- 为什么我的C 文本文件解析脚本比我的Python脚本要慢得多
- 通过我的Python脚本中的子进程从c++中捕获cout
- 将Python变量传递给我的C++脚本和g++调用
- 为什么 dev C 不运行此脚本?由于某种原因不喜欢我的矢量声明
- 我应该使用std::system来编写单元测试的脚本部分吗
- 需要对c++脚本进行修复(而不是我的)
- 在我的解释器上为脚本代码实现语法检查器的最佳方式是什么
- 编译我的脚本语言