我正在使用NSIS为C ++程序构建一个多架构安装程序。我正在使用Visual Studio 2010.一切都很好,但我不知道如何使安装程序依赖于所有体系结构的构建。
我创建了一个项目来运行makensis作为构建步骤,并将其配置为依赖于解决方案中的所有其他项目。我目前正在构建Win32和X86_64架构。 NSIS项目仅作为X86_64配置的一部分构建。但它包装了以X86_64和Win32配置构建的文件。这就是问题所在。如果我构建Win32然后立即X86_64,一切都很好。如果我从X86_64开始,构建失败,因为它找不到Win32文件。更糟糕的是,如果我更改一些源代码并仅重建X86_64,安装程序项目将很乐意选择过时的Win32文件而不会出现任何问题。
我可以从X86_64版本强制构建Win32,还是做其他任何事情来使其工作?
我是Unix类型,Windows对我来说是一个外星世界。
任何
答案 0 :(得分:1)
至于“万无一失”的解决方案,如果我理解正确的话:
Test.sln
),如果我错了,请纠正我。所以,要完成这项任务:
Test.msbuild
文件,例如下面的文件,<Exec>
element,即您想要运行MakeNSIS的地方,msbuild Test.msbuild
,Test.sln
构建Win32
的所有项目,然后为x64
构建项目,之后只会运行MakeNSIS。<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build" DependsOnTargets="Build_Win32;Build_x64">
<!-- Run whatever command you like, such as MakeNSIS .. ? -->
<Exec Command="notepad.exe" />
</Target>
<Target Name ="Build_Win32">
<MSBuild Projects="Test.sln" Properties="Configuration=Release;Platform=Win32" />
</Target>
<Target Name ="Build_x64">
<MSBuild Projects="Test.sln" Properties="Configuration=Release;Platform=x64" />
</Target>
</Project>
如果上述内容不符合您的要求,请澄清您的实际问题。
修改强>
在评论中澄清您的请求后,我会提出以下解决方案。我更喜欢上面带有Test.msbuild
的解决方案,但是你去了:
BuildInstaller
添加到您的解决方案中BuildInstaller
,BuildInstaller.vcxproj
,并在结束</Project>
标记之前附加以下代码段:<ItemGroup>
<ProjectsToBuild Include="..\**\*.vcxproj" Exclude="..\**\BuildInstaller.vcxproj"/>
</ItemGroup>
<Target Name="Build" DependsOnTargets="Build_Win32;Build_x64">
<!-- Run whatever command you like, such as MakeNSIS .. ? -->
<Exec Command="notepad.exe" />
</Target>
<Target Name="Build_Win32">
<MSBuild Projects="@(ProjectsToBuild)" Properties="Configuration=Release;Platform=Win32" />
</Target>
<Target Name="Build_x64">
<MSBuild Projects="@(ProjectsToBuild)" Properties="Configuration=Release;Platform=x64" />
</Target>
最初我认为我可以放弃<ItemGroup>
元素并使用Projects="..\Test.sln"
而不是Projects="@(ProjectsToBuild)"
,因为不应该存在循环依赖(BuildInstaller.vcxproj不是为Release构建的),而是构建永远如此,所以必须有一些问题,很奇怪...
这是否满足您的需求?
答案 1 :(得分:0)
我认为您需要首先构建Win32配置,然后再构建64位配置。
makensis项目应该在两个完成后成功(成功!)。
例如,可以从Post Build事件(对于64位配置)或作为单独的项目调用它。
我不确定您的makensis项目是否基于 Visual&amp;安装程序(http://www.visual-installer.com - 抱歉小自助促销:)或者它是VS解决方案中包含的纯文本批处理项目。
在这两种情况下,VS中的配置管理器都允许您定义构建顺序。 makensis项目应该始终是最后一个,因此它可以找到以前配置中的所有依赖项。
最好在makensis项目中使用相对路径 - 类似于${TARGET_PATH}
,这将为每个具有不同值的配置定义。