简短问题
是否有可接受的方法在远程服务器上运行嵌入式软件项目的编译器/链接器,并且仍然能够在本地计算机上编程和调试软件。
注意我知道每个IDE都会有所不同,所以我想要的是如何定义工作流来完成这个任务,假设可以使用.o / .elf文件运行IDE从远程服务器构建。
关注的领域
1)与虚拟Windows机器的联网。
2)如何/何时将源代码传输到要构建的服务器。
背景
我们的软件团队使用的每个微处理器系列都需要它自己的编译器,IDE和编程器。加班加点带来许多难以克服的困难。
1)每个开发人员都需要自己的,通常是昂贵的许可证 2)要获取另一个开发人员启动的项目,需要格外小心,以确保所有编译器设置都相同 3)支持遗留软件可能需要与当前安装的编译器冲突的旧编译器 ......列表一直在继续。
编辑:7-10-2011 1:30 PM CST
1)我所说的编译器确实是交叉编译器
2)该系统理想情况下支持的处理器系列的简短列表:Motorola Coldfire,PIC和STM8
3)我们的Coldfire编译器是GCC的变体,但我们必须支持它的多个版本。所有其他编译器使用不提供浮动许可证的目标特定编译器
4)为了解决littleadv问题,我想要完成的是外部构建服务器
5)我们目前使用托管在在线存储库上的SVN和GIT的组合来进行版本控制。这实际上是我认为我将文件传输到构建服务器的方式
6)对于大多数编译器,我们都坚持使用Windows。
我现在相信要走的是外部构建服务器。过来还有一些障碍。我将假设我们必须通过版本控制软件将源文件传输到服务器。看到多个产品系列如何需要访问相同的编译器,为每个项目设置一个实例似乎并不实用。
为每个编译器创建一个存储库是否有意义,包括构建,源,包含,输出等文件夹...然后在用户端有脚本负责从IDE的文件结构中移动文件到编译器所需的结构?这种方法可以防止项目存储库被破坏,并提供编译器使用次数的结果。感谢到目前为止所有出色的回复!
答案 0 :(得分:5)
答案 1 :(得分:2)
你的问题的一部分在其他答案中没有得到很多解决(至少在我写这篇文章的时候)是如何将文件传输到构建服务器。我可以在这一点上提供一些经验,因为我自己的开发过程非常接近你的情况。
就我而言,我使用“Unison”实用程序将我的开发笔记本电脑上的主目录的一部分镜像到构建服务器上的主目录的一部分。从程序员的角度来看,Unison基本上是rsync的包装器,带有一组存储的校验和,用于确定连接两端的文件是否已被修改。它用它来进行双向同步;我在本地进行的任何修改都会转移到远程端,反之亦然。通常的操作方式是要求确认所有转移;你可以把它关掉,但我觉得它很方便,以确保我改变了我认为我改变了。
所以,我通常的工作流程是:
它不如本地机器上的编辑 - 编译 - 运行循环快,但我发现它仍然足够快,不会烦人。并且它比使用源代码控制作为中介更不重要;你不需要检查你所做的每一个编辑,并将其记录下来。
此外,Unison具有跨平台工作良好的优势;您可以在Windows上使用它(最容易使用Cygwin,虽然这不是必需的),如果您在Windows机器上运行SSH服务器,在构建服务器上运行自己的连接服务,或者只是简单地通过SSH连接使用Windows文件共享并将构建服务器视为“本地”文件。 (或者您可以将服务器端文件放在服务器场中基于Linux的Samba共享上,并将其挂载到Windows构建VM上;这可能比在VM中使用“本地”文件更容易。)
编辑:实际上,这是对littleadv讨论文件传输的选项2的一种修改;它取代了通过Samba / NFS共享直接在服务器上编辑文件的位置。与它并行运行相当好 - 我发现拥有文件的本地缓存是理想的,避免了远程工作时的网络延迟问题,但我公司的其他工程师更喜欢像sshfs这样的东西(当然,还有 - 使用Samba或NFS的网站很好)。从构建服务器的角度来看,它都会产生相同的结果。
答案 2 :(得分:1)
我不确定我明白你的意思,但我会尽力回答我认为的问题: - )
首先,你在谈论交叉编译器,对吧?您正在一个系统上编译要在另一个系统上运行的代码。
其次,您需要寻找“浮动”许可证模型,而不是每个开发人员都有专用的编译器许可证。
第三,你正在寻找一个每个人都可以编译的构建机器,而不是每个开发人员在他自己的机器上编译。
这些问题不一样。我会试着掩盖它们:
交叉编译器 - 有些是免费的,有些是许可的。有些是IDE,有些只是命令行编译器,可以集成到Eclipse / VS / SlickEdit / vi / whatelse中。我不知道你正在使用哪一个,所以让我们来看看Tornado(VxWorks编译器)。它拥有它自己可怕的IDE,但可以集成到其他IDE中(我直接使用SlickEdit和它的项目文件,就像一个魅力)。 Tornado编译器需要许可证并且有几种不同的模型,因此我们将在接下来的两点中查看它。
浮动许可证。例如,Tornado可以为每个安装模型提供单一许可证,也可以为每个请求分配许可证的浮动许可证。如果您正在使用构建计算机 - 您将需要单个许可证(在这种情况下,您一次只能运行一个实例,这会失败),或者浮动许可证一次运行多个实例。有些交叉编译器/库根本不需要许可证(例如各种GCC风格)。
构建机器 - 我经历过将VxWorks Tornado用作PC上的专用编译器以及构建机器安装。
对于构建机器,您需要一种方法来传递代码来构建。对你来说这是一个问题#2:
2)如何/何时转移来源 代码到服务器构建。
通过网络共享并不是一个好主意,因为网络延迟会使编译时间无法忍受。相反,做其中一个:
在构建计算机上安装源代码控制,让开发人员通过源代码控制传递代码。这会造成破坏源代码控制的风险,所以我们所做的就是:
所有开发人员直接在构建计算机上检出文件(具有大量存储空间的大型UNIX系统),并且每个开发人员都会使用网络共享(SAMBA或NFS)编辑文件, 1GB公司局域网很好,并在构建机器上本地编译。有些人会使用vorn / emacs / Unix版本的Tornado IDE在Unix系统上直接编辑,我讨厌。这也回答了你的问题#1:
1)与虚拟Windows联网 机。
(它不一定是虚拟的Windows机器,如果你有从Linux到嵌入式系统的交叉编译器,Linux也可以工作。)
希望有所帮助。
答案 3 :(得分:0)
我不是这里的专家,但是可以为每个目标环境创建虚拟机。然后,开发人员可以在本地计算机上启动所需的VM映像。
答案 4 :(得分:0)
您尝试做的似乎是“distributed build”,其中只有一个构建服务器。这可能是CMake之类的。然而,虽然这可以“节省”您对编译器许可证的使用,但对于许多工具链而言,单用户许可证也(或在某些情况下专用)适用于调试器;如果您的开发人员无法调试和测试他们的代码,那么它可能不是特别有用。
一种解决方案可能是使用具有必要开发工具和目标硬件的单台机器,并通过远程桌面从多个工作站访问它,如果您只需要命令行界面,甚至可以通过Telnet访问它。远程桌面一次只允许一个用户访问,但在许多情况下,多个同时访问可能与EULA相反。
DIY解决方案是创建自己的TCP / IP应用程序,它接受构建命令和文件,执行本地编译器或链接器并返回结果(构建日志和/或目标文件等)。
通过将所有开发工作转移到开源工具(如GCC或SDCC),可以完全避免这个问题;这将取决于您需要支持的目标。