2009-09-15 119 views
1

我想设置我的Windows CE应用程序的自动生成。然而, 我们在同一时间,我们的应用不断发展我们的平台(添加 扩展卡,新服务等)。我希望能够联想到我的 的应用程序建立一个版本的SDK,要么有 的SDK安装(不太可取选项)多个版本或与我 应用versionned的SDK(最可取的选择)。我希望能够运行并行版本 ,所以SDK应该在本地项目中,而不是在项目之间共享。自动化构建

目前我已经能够做的就是安装SDK和移动头 和库到我的项目然后添加相对路径我的项目包括 和库。我的问题是:有不止的东西,都安装在SDK头文件和库 所以我可能会遇到麻烦,如果我建立一个 应用程序与旧的头文件和库并安装了新的SDK(或更新版本 头文件和库比安装SDK)?

另一种方法是将Visual Studio /命令行工具重定向到我自己的 header/libs和Properties.xml(但我还没有想到如何做到这一点)。

有没有人这样做过?

感谢,

亚历克西斯

+0

如果这不是Platfom-Builder问题,请删除标记。请澄清以下内容:您想使用特定SDK中的头文件和库,然后让所有未来的版本不依赖于此SDK? – Shaihi 2009-09-21 06:07:53

+0

对不起,Platfom-Builder标记已删除。 我希望我的版本完全独立于SDK安装程序。我希望所有SDK安装程序信息都包含在我的项目中。因此,无论SDK做什么(安装头文件和库文件以及其他任何操作),我都希望它包含在我的项目中,这样我的自动构建就不依赖于安装程序。但是,我不确定SDK的全部功能,我想确保包含新的SDK头文件和库文件足以使我的项目独立于SDK安装程序。 – Alexis 2009-09-30 16:35:54

回答

1

这实际上是一个相当广泛的问题,涵盖了一些领域。首先让我们看看SDK实际是什么以及它包含什么。

当您创建平台时,您将包含目录项目。这些项目中的每一个都有一组关联的头文件和lib文件。当您滚动SDK时,滚轮会为每个目录组件(基于每个处理器)(因为SDK可支持多个处理器)合并所有这些标题和库。它还添加了您在平台BSP中定义的任何“额外”文件(例如仿真器BSP将包含仿真器映像),并且还包含在SDK定义中专门定义的任何额外文件。

那么SDK的内容何时更改?那么,无论何时您对平台中包含的目录项进行更改,或者您明确选择添加或删除SDK中定义的额外文件。

对于自动化,它非常简单。我们倾向于做的事情(并且它与多家公司一起工作了多年)是定义一个非常非常广泛的一组催化剂组分。基本上扔进目录中的厨房水槽。

不要添加任何自定义文件(所以如果你有自定义头文件的驱动程序或其他,不要包括在SDK中)。而是手动将这些文件发布到通用文件夹。将此常用文件夹添加到应用程序“附加包含文件路径”。

现在您可以随意修改平台而不会影响应用程序。唯一的潜在问题是,由于许可或大小的限制,您可能会使用一个标题或lib,实际上您最终会从平台上删除它。

将所有这些自动化实际上是一个完全独立的问题,而且它似乎并不像你实际上在问如何执行构建自动化。

+0

感谢您的回复。它绝对看起来像一个潜在的解决方案总的来说,我试图避免在构建服务器上安装任何类型的SDK(不安装Visual Studio和Platform Builder将会是最好的,并且也会在配置控制下进行安装),但似乎SDK定义了可以'跟踪来满足我在没有安装SDK的情况下使用特定SDK构建的构建环境。但是你的解决方案是通用的,并且可以在多个项目中工作。 – Alexis 2010-12-09 15:33:25

+0

是的,我们从来没有能够避免必须在构建服务器上安装Studio和“常规”SDK,但由于我们有一个SDK,所以它是一次性的,因此维护率很低。 – ctacke 2010-12-09 16:20:38

0

听起来好像要与PB吸入从它的信息PATH环境发挥。我的意思是(根据我的理解),你希望2个版本将从2个不同的位置获取文件,对吧?在这种情况下,您可以运行不同的批处理文件来设置适当的环境设置,然后每个批处理文件的构建都会有所不同。 以下博客对Platform Builder具有的构建工具(link)有很好的评论。
您是否希望包括宏来控制,其中PB从取头文件,为了每一次你将不得不作出库的路径可以由你会在设定的宏针对不同的库链接玩批处理文件,例如:
SOURCELIBS = \
$(_ MY_PREDEFINED_PATH_TO_THE_LIBS)\ LIB \ libName.lib

然后在批处理文件将设置不同的_MY_PREDEFINED_PATH_TO_THE_LIBS

+0

感谢您的回答。 这不是一个平台生成器相关的问题。我正在使用从Paltform Builder生成的SDK使用常规Visual Studio 2005。我的问题是关于SDK:它安装了什么,并且只安全地在我的项目中本地存储/强制标题和库,以使SDK版本独立。 – Alexis 2009-09-18 17:08:18

0

我建议你对付它通过使用一个可行的配置(版本)管理策略:只是排除混淆版本的头文件和库管理器的可能性IES。即使它起作用,但肯定会有一个不受支持的移民,这可能会给你带来一些奇怪的问题。

微软的工具让它变得不容易,因为他们喜欢c:\ program files等文件.... 但是如果你能保证所有的工具都在版本控制之下,你总是可以回滚一个版本的工具。注意注册表关联。

如果您可以制作相同的二进制版本(即没有嵌入的日期/内部版本号!),您可以验证在配置管理中移动到特定版本时,可以在两台不同的机器上重建相同的二进制文件。这会花费很多时间,但是花费的时间不会太多,因为当你处于一个不受控制的SDK版本冲突的环境时,它会花费很多时间!

+0

谢谢Aadrian。我们还没有源代码管理工具(尚未)。我正在寻找有关Microsoft工具中专用和隐藏设置的帮助,但我认为现在我会继续使用版本控制SDK标头和库。所有好的和有用的建议,但。 – Alexis 2009-11-06 18:25:41

0

我们生成SDK,但将libs/headers复制到共享的svn文件夹中。每次我们构建新的SDK时,都会更新此文件夹。我们唯一需要的SDK是将处理器平台安装到Visual Studio中。一旦完成,我们的应用程序使用svn:externals引入标题/库。

这样,我们的应用程序的旧版本仍然可以提出并编译与他们的原始SDK。否则,我们需要手动卸载/重新安装SDK,只要我们想与其他分支一起工作。

我曾经研究过从SDK中提取所有文件,以便它只安装VS需要的注册表项,但是我懒得放弃。