因此,我正在尝试使用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:
错误。
答案 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。