如何在visual studio中正确设置我的构建后脚本

时间:2017-03-26 23:52:57

标签: c++ visual-studio build-script

因此,我正在尝试使用Visual Studio构建脚本从我的exe中构建一个.lib文件,如此帖子的接受答案所示:Linking to multiple .obj for unit testing a console application。基本上,他们建议在我的项目的构建后事件中放置的构建后脚本是:

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:错误。

1 个答案:

答案 0 :(得分:1)

您没有提到您正在使用的Visual Studio版本。从记忆中来看,答案并没有太大变化,但我会回答Visual Studio 2015,因为这是我所得到的。

探索适用于所有Visual Studio版本的宏值的一种方法是使用ECHO命令。将您的构建后脚本更改为

echo TargetPath: "$(TargetPath)"

并且您应该能够在构建项目时在“输出”窗口中读取宏的值。在大多数现代版本的Visual Studio中,Echo技巧不是必需的。

构建后事件属性页中,单击命令行字段末尾的下拉列表,然后单击<编辑...取代。在Visual Studio 2015中,随后出现的对话框将显示命令行和评估值,以便您可以看到扩展了宏的命令行。

还有宏>> 按钮。单击该按钮,您将看到一个对话框,显示每个宏名称及其值。列表顶部的文本框允许您将结果过滤到包含字符序列的结果。

$(TargetPath)被描述为here"构建的主输出文件的绝对路径名(定义为驱动器+路径+基本名称+文件扩展名)&# 34; 。这真正意味着常规上的输出目录目标名称目标扩展程序属性的价值财产页面。

LIB工具描述为here。要获得有关LIB运行的更多信息,可以添加/ VERBOSE选项。您也可以删除/ NOLOGO选项,以便至少确认您正在运行LIB(并运行正确版本的LIB)。

很难说什么"什么都不做"真正意思。我猜最可能的失败是要创建lib文件 - 但不是你期望的;或$(ProjectDir)\ Source。

中没有obj文件

探索后一种情况的一种方法是将构建后事件更改为

dir "$(ProjectDir)\Source\*.obj"

然后检查构建输出以查看是否列出了obj文件。如果目录中没有.obj文件,则输出窗口将显示类似于

的内容
1>   Directory of C:\TestPrograms\vc.net.2015\VCConsole
1>
1>  File Not Found

,错误列表窗口将显示dir命令退出,代码为1。