Visual c++ Visual Studio 2012是否可以执行自定义生成,例如:编译项目a>;编制并链接项目B>;链接项目A?
我正在寻找一种使用Visual Studio 2012按此顺序构建项目的方法(C++但可能是一个一般性问题):Visual c++ Visual Studio 2012是否可以执行自定义生成,例如:编译项目a>;编制并链接项目B>;链接项目A?,visual-c++,visual-studio-2012,msbuild,build-process,Visual C++,Visual Studio 2012,Msbuild,Build Process,我正在寻找一种使用Visual Studio 2012按此顺序构建项目的方法(C++但可能是一个一般性问题): 编译ProjectA(我只需要.objs) 编译并链接ProjectB 链接项目A 我不能简单地在ProjectB中使用ProjectA的引用/依赖项,因为它会过早地执行ProjectA的链接 我曾经用VS 2008这样做: 项目B上的预生成事件:vcbuild/pass0/pass1ProjectA 编译并链接ProjectB(它是ProjectA的依赖项) 编译(实际上什么都
- 编译ProjectA(我只需要.objs)
- 编译并链接ProjectB
- 链接项目A
- 项目B上的预生成事件:
ProjectAvcbuild/pass0/pass1
- 编译并链接ProjectB(它是ProjectA的依赖项)
- 编译(实际上什么都不做,因为它已经构建)并链接ProjectA
msbuild/t:BuildGenerateSources/t:BuildCompile
这里的问题是,在第三步中,它应该只链接(因为msbuild已经编译),现在它再次编译ProjectA,然后链接它。使用msbuild启用诊断详细性向我展示了以下情况:由于自上次生成以来命令行中的更改,强制重新生成所有源文件。。而且几乎没有人(包括)有解决方案,因为不可能看到这两个命令正在进行比较
直接使用VisualStudio(没有在命令行中启动msbuild的预构建事件)执行我想要的操作的另一个好处是将编译错误报告到错误列表,并在输出窗口中单击
也许在幕后,这将使用msbuild和vcxprojs中指定的目标,但我想知道它是否可行
编辑:我已经尝试用devenv替换调用msbuild的命令,但是devenv没有可以指定compile only(无链接)的开关,因此也不能使用它
Edit2:听起来好像有人在这里问了类似的问题(没有解决方案)好的,因此可以通过覆盖.vcxproj中的构建步骤并删除目标构建链接来完成
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<BuildSteps Condition="'$(BuildSteps)' == '' or '$(SkipLink)'!='false'">
ResolveReferences;
PrepareForBuild;
InitializeBuildStatus;
BuildGenerateSources;
BuildCompile;
<!-- BuildLink; -->
</BuildSteps>
</PropertyGroup>
请注意,BuildSteps覆盖中添加了一个条件SkipLink,以便我们可以指定何时执行BuildLink,何时不执行。我很好奇为什么需要执行此操作,因为我需要ProjectA(一个DLL)的objs为ProjectB(一个DLL)创建一个.def文件创建导入库。为什么不让ProjectA的后期生成活动生成自己的.def文件作为输出,以便在需要时可用,而不是让依赖项目代表其生成输出?
msbuild /t:BuildLink /p:VisualStudioVersion=11.0 /p:Configuration=Debug /p:Platform=x64 /p:SkipLink=false "ProjectA.vcxproj"