<p>Does anyone have battle stories to share trying to use Visual Studio to develop applications for Unix?  And I'm not talking using .NET with a Mono or Wine virtual platform running beneath.</p>

<p>Our company has about 20 developers all running Windows XP/Vista and developing primarily for Linux &amp; Solaris.  Until recently we all logged into a main Linux server and modified/built code the good old fashioned way: Emacs, Vi, dtpad - take your pick.  Then someone said, "hey - we're living in the Dark Ages, we should be using an IDE".</p>

<p>So we tried out a few and decided that Visual Studio was the only one that would meet our performance needs (yes, I'm sure that IDE X is a very nice IDE, but we chose VS).</p>

<p>The problem is, how do you setup your environment to have the files available locally to VS, but also available to a build server?  We settled with writing a Visual Studio plugin - it writes our files locally and to the build server whenever we hit "Save" and we have a bit fat "sync" button that we can push when our files change on the server side (for when we update to the latest files from our source control server).  </p>

<p>The plugin also uses Visual Studio's external build system feature that ultimately just ssh's into the build server and calls our local "make" utility (which is Boost Build v2 - has great dependency checking, but is <em>really</em> slow to start as a result i.e. 30-60 seconds to begin).  The results are piped back into Visual Studio so the developer can click on the error and be taken to the appropriate line of code (quite slick actually).  The build server uses GCC and cross-compiles all of our Solaris builds.</p>

<p>But even after we've done all this, I can't help but sigh whenever I start to write code in Visual Studio.  I click a file, start typing, and VS chugs to catch up with me.</p>

<p>Is there anything more annoying than having to stop and wait for your tools?  Are the benefits worth the frustration?</p>

<p>Thoughts, stories, help?</p>

[{'answer_id': 15643, 'author': 'Judge Maygarden', 'author_id': 1491, 'author_profile': 'https://Stackoverflow.com/users/1491', 'pm_score': 1, 'selected': False, 'text': "<p>Wow, that sounds like a really strange use for Visual Studio. I'm very happy chugging away in vim. However, the one thing I love about Visual Studio is the debugger. It sounds like you are not even using it.</p>\n\n<p>When I opened the question I thought you must be referring to developing portable applications in Visual Studio and then migrating them to Solaris. I have done this and had pleasant experiences with it.</p>\n"}, {'answer_id': 15669, 'author': 'roo', 'author_id': 716, 'author_profile': 'https://Stackoverflow.com/users/716', 'pm_score': 2, 'selected': False, 'text': '<p>I feel your pain. We have an application which is \'cross-platform\'. A typical client/server application where the client needs to be able to run on windows and linux. Since our client base mostly uses windows we work using VS2008 (the debugger makes life a lot easier) - however we still need to perform linux builds. </p>\n\n<p>The major problem with this was we were checking in code that we didn\'t know would build under gcc, which would more than likely break the CI stuff we had setup. So we installed <a href="http://www.mingw.org/" rel="nofollow noreferrer">MingGW</a> on all our developer\'s machines which allows us to test that working copy will build under gcc before we commit it back to the repository.</p>\n'}, {'answer_id': 15673, 'author': 'Matt Nelson', 'author_id': 788, 'author_profile': 'https://Stackoverflow.com/users/788', 'pm_score': 0, 'selected': False, 'text': '<p>We are using a similar solution to what you described.</p>\n\n<p>We have our code stored on the Windows side of the world and UNIX (QNX 4.25 to be exact) has access though an NFS mount (thanks to UNIX services for Windows). We have an ssh into UNIX to run make and the pipe to output into VS. Accessing the code is fast, builds are a little slower than before, but our longest compile is currently less than two minutes, not a big deal.</p>\n\n<p>Using VS for UNIX development has been worth the effort to set it up, because we now have IntelliSense. Less typing = happy developer.</p>\n'}, {'answer_id': 15686, 'author': 'Josh', 'author_id': 257, 'author_profile': 'https://Stackoverflow.com/users/257', 'pm_score': 1, 'selected': False, 'text': "<p>Network shares.</p>\n\n<p>Of course, then you have killer lag on the network, but at least there's only one copy of your files.</p>\n\n<p>You don't want to hear what I did when I was developing on both platforms.  But you're going to: drag-n-drop copy a few times a day.  Local build and run, and periodically checking it out on Unix to make sure gcc was happy and that the unit tests were happy on that platform too.  Not really a rapid turnaround cycle there.</p>\n"}, {'answer_id': 16231, 'author': 'Mike Baker', 'author_id': 1881, 'author_profile': 'https://Stackoverflow.com/users/1881', 'pm_score': 1, 'selected': False, 'text': '<p>@monjardin</p>\n\n<p>The main reason we use it is because of the re-factoring/search tools provided through Visual Assist X (by Whole Tomato).  Although there are a number of other nice to haves like Intelli-sense.  We are also investigating integrations with our other tools AccuRev, Bugzilla and Totalview to complete the environment.</p>\n\n<p>@roo</p>\n\n<p>Using multiple compilers sounds like a pain.  We have the luxury of just sticking with gcc for all our platforms.</p>\n\n<p>@josh</p>\n\n<p>Yikes!  That sounds like a great way to introduce errors! :-)</p>\n'}, {'answer_id': 211245, 'author': 'magius', 'author_id': 428965, 'author_profile': 'https://Stackoverflow.com/users/428965', 'pm_score': 3, 'selected': False, 'text': '<p><em>VS chugs to catch up with me.</em> <br>\nHmmm ... you machine needs more memory &amp; grunt. Never had performance problems with mine.</p>\n\n<p>I\'ve about a decade\'s experience doing exactly what you\'re proposing, most of it in the finance industry, developing real-time systems for customers in the banking, stock exchanges, stock brokerage niches.</p>\n\n<p>Before proceeding further, I need to confess that all this was done in VS6 + CVS, and of late, SVN.</p>\n\n<p><strong>Source Code Versioning</strong> </p>\n\n<p>Developers have separate sourcesafe repositories so that they can store their work and check it packages of work at logical milestones. When they feel they want to do an integration test, we run a script that checks it into SVN. </p>\n\n<p>Once checked into SVN, we\'ve a process that kicks off that will automatically generate relevant makefiles to compile them on the target machines for continuous integration.</p>\n\n<p>We\'ve another set of scripts that synchs new stuff from SVN to the folders that VS looks after. There\'s a bit of gap because VS can\'t automatically pick up new files; we usually handle that manually. This only happens regularly the first few days of the project.</p>\n\n<p>That\'s an overview of how we maintain codes. I have to say, I\'ve probably glossed over some details (let me know if you\'re interested).</p>\n\n<p><strong>Coding</strong></p>\n\n<p>From the coding aspect, we rely heavily on the pre-processors (i.e. #define, etc) and flags in the makefile to shape compilation process. For cross platform portability, we use GCC. A few times, we were force to use aCC on HP-UX and some other compilers, but we did not have much grief. The only thing that is a constant pain, is that we had to watch out for thread heap spaces across platforms. The compiler does not spare us from that.</p>\n\n<p><strong>Why?</strong></p>\n\n<p>The question is usually, "Why the h*ll would you even what to have such a complicated way of development?". Our answer is usually another question that goes, "Have you any clue how insane it is to debug a multi-threaded application by examining the core dump or using gdb?". Basically, the fact that we can trace/step through each line of code when you\'re debugging an obscure bug, makes it all worth the effort!</p>\n\n<p>Plus!... VS\'s intellisense feature makes it so easy to find the method/attribute belonging to classes. I also heard the VS2008 has refactoring capabilities. I\'ve shifted my focus to Java on Eclipse that has both features. You\'d be more productive focusing coding business logic rather than devote energy making your mind do stuff like <em>remember</em>!</p>\n\n<p>Also! ... We\'d end up with a product that can run on both Windows and Linux!</p>\n\n<p>Good luck!</p>\n'}, {'answer_id': 211350, 'author': 'David Sykes', 'author_id': 259, 'author_profile': 'https://Stackoverflow.com/users/259', 'pm_score': 2, 'selected': False, 'text': "<p>We develop for Mac and PC. We just work locally in whatever ide we prefer, mostly VS but also xcode. When we feel our changes are stable enough for the build servers we check them in. The two build servers (Mac and PC) look for source control checkins, and each does a build. Build errors are emailed back to the team.</p>\n\n<p>Editing files live on the build server sounds precarious to me. What happens if you request a build while another developer has edits that won't build?</p>\n"}, {'answer_id': 278946, 'author': 'supercheetah', 'author_id': 36053, 'author_profile': 'https://Stackoverflow.com/users/36053', 'pm_score': 2, 'selected': False, 'text': '<p>I know this doesn\'t really answer your question, but you might want to consider setting up remote X sessions, and just run something like <a href="http://www.kdevelop.org/" rel="nofollow noreferrer">KDevelop</a>, which, by the way, is a very nice IDE--or even <a href="http://www.eclipse.org/" rel="nofollow noreferrer">Eclipse</a>, which is more mainstream, and has a broader developer base.  You could probably just use something like <a href="http://www.straightrunning.com/XmingNotes/" rel="nofollow noreferrer">Xming</a> as the X server on your Windows machines.</p>\n'}, {'answer_id': 278983, 'author': 'bmdhacks', 'author_id': 14032, 'author_profile': 'https://Stackoverflow.com/users/14032', 'pm_score': 1, 'selected': False, 'text': '<p>I\'ve had good experience developing Playstation2 code in Visual Studio\nusing gcc in <a href="http://www.cygwin.com/" rel="nofollow noreferrer">cygwin</a>.  If you\'ve got cygwin with gcc and glibc, it\nshould be nearly identical to your target environments.  The fact that you\nhave to be portable across Solaris and Linux hints that cygwin should\nwork just fine.</p>\n'}, {'answer_id': 706705, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 1, 'selected': False, 'text': '<p>Most of my programming experience is in Windows and I\'m a big fan of visual studio (especially with Resharper, if you happen to be doing C# coding).  These days I\'ve been writing an application for linux in C++.  After trying all the IDEs (Netbeans, KDevelop, Eclipse CDT, etc), I found Netbeans to be the least crappy.  For me, absolute minimum requirements are that I be able to single-step through code and that I have intellisense, with ideally some refactoring functions as well.  It\'s amazing to me how today\'s linux IDE\'s are not even close to what Visual Studio 6 was over ten years ago.  The biggest pain point right now is how slow and poorly implemented the intellisense in Netbeans is.  It takes 2-3 seconds to populate on a fast machine with 8GB of RAM.  Eclipse CDT\'s intellisense was even more laggy.  I\'m sorry, but a 2 second wait for intellisense doesn\'t cut it.</p>\n\n<p>So now I\'m looking into using VS from Windows, even though my only build target is linux...</p>\n\n<p>Chris, you might want to look at the free automation build server \'CruiseControl\', which integrates with all main source control systems (svn, tfs, sourcesafe, etc.).  It\'s whole purpose is to react to check-ins in a source control system.  In general, you configure it so that anytime anyone checks code in, a build is initiated and (ideally) unit tests are run.  For some languages there are some great plugins that do code analysis, measure unit test code coverage, etc.  Notifications are sent back to the team about successful / broken builds.\nHere\'s a post describing how it can be set up for C++: <a href="http://confluence.public.thoughtworks.org/display/CC/UsingCruiseControlWithCplusPlus" rel="nofollow noreferrer">link (thoughtworks.org)</a>.</p>\n\n<p>I\'m just getting started with converting from a linux-only simple config (Netbeans + SVN, with no build automation) to using Windows VS 2008 with build automation back-end that runs unit tests in addition to doing builds in linux.  I shudder at the amount of time it\'s going to take me to get that all configured, but the sooner the better, I guess.</p>\n\n<p>In my ideal end-state I\'ll be able to auto-generate the Netbeans project file from the VS project, so that when I need to debug something in linux I can do so from that IDE.  VS project files are XML-based, so that shouldn\'t be too hard.  </p>\n\n<p>If anyone has any pointers for any of this, I\'d really appreciate it.</p>\n\n<p>Thanks,</p>\n\n<p>Christophe</p>\n'}, {'answer_id': 1359561, 'author': 'Mike Kale', 'author_id': 4627, 'author_profile': 'https://Stackoverflow.com/users/4627', 'pm_score': 1, 'selected': False, 'text': "<p>You could have developers work in private branches (easier if you're using a DVCS).  Then, when you want to checkin some code, you check it into your private branch on [windows|unix], update your sandbox on [unix|windows] and build/test before committing back to the main branch.</p>\n"}, {'answer_id': 2125552, 'author': 'kfsone', 'author_id': 257645, 'author_profile': 'https://Stackoverflow.com/users/257645', 'pm_score': 0, 'selected': False, 'text': '<p>Check out "Final Builder" (<a href="http://www.finalbuilder.com/" rel="nofollow noreferrer">http://www.finalbuilder.com/</a>). Select a version control system (e.g. cvs or svn, to be honest, cvs would suit this particular use case better by the sounds of it) and then set up build triggers on FinalBuilder so that checkins cause a compile and send the results back to you.</p>\n\n<p>You can set up rulesets in FinalBuilder that prevent you checking in / merging broken code into the baseline or certain branch folders but allow it to others (we don\'t allow broken commits to /baseline or /branches/*, but we have a /wip/ branching folder for devs who need to share potentially broken code or just want to be able to commit at the end of the day).</p>\n\n<p>You can distribuite FB over multiple "build servers" so that you don\'t wind up with 20 people trying to build on one box, or waiting for one box to process all the little bitty commits.</p>\n\n<p>Our project has a Linux-based server with Mac and Win clients, all sharing a common codebase. This set up works ridiculously well for us.</p>\n'}, {'answer_id': 25830066, 'author': 'dgnuff', 'author_id': 4022617, 'author_profile': 'https://Stackoverflow.com/users/4022617', 'pm_score': 0, 'selected': False, 'text': '<p>I\'m doing the exact same thing at work.  The setup I use is VS for Windows development, with a Linux VM running under VirtualBox for local build / execute verification.  VirtualBox has a facility where you can make a folder on the host OS (Windows 7 in my case) available as a mountable filesystem in the guest (Ubuntu LTS 12.04 in my case).  That way, after I start a VS build, and it\'s saved the files, I can immediately start a make under Linux to verify it builds and runs OK there.</p>\n\n<p>We use SVN for source control, the final target is a Linux machine (it\'s a game server), so that uses the same makefile as my local Linux build.  That way, if I add a file to the project / change a compiler option, usuall adding / changing a -D, I do the modifications initially under VS, and then immediately change the Linus makefile to reflect the same changes.  Then when I commit, the build system (Bamboo) picks up the change, and does its own verification build.</p>\n\n<p>Hard earned experience says this is an order of magnitude easier if you build like this from day one.</p>\n\n<p>The first project I worked on started as Windows only, I was hired to port it to Linux, since they wanted to switch to a homogenous server environment, and everything else was Linux.  Retrofitting a Windows project into this sort of a setup was a fairly major expenditure of effort.</p>\n\n<p>Project number two was done "two system build" right from day one.  We wanted to maintain the ability to use VS for development / debug since it is a very polished IDE, but we also had the requirement for final deploy to Linux servers.  As I alluded to above, when the project was build with this in mind right from the start, it was quite painless.  The worst part was a single file: system_os.cpp that contained OS specific routines, things like "get current time since linux epoch start in milliseconds", etc. etc. etc.</p>\n\n<p>At the risk of getting a little off topic, we also created unit tests for this, and having the unit tests for the OS specific pieces provided a great deal of confidence that they worked the same on both platforms.</p>\n'}]
['https://Stackoverflow.com/questions/15635', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1881/']