Я делаю то же самое на работе. Я использую установку VS для разработки Windows, с виртуальной машиной Linux, работающей под VirtualBox для локальной проверки сборки / выполнения. В VirtualBox есть средство, позволяющее сделать папку на хост-ОС (в моем случае, Windows 7) доступной в качестве монтируемой файловой системы в гостевой системе (в моем случае, Ubuntu LTS 12.04). Таким образом, после того, как я запустил сборку VS и сохранил файлы, я могу немедленно запустить make под Linux, чтобы убедиться, что он там собирается и работает нормально.
Мы используем SVN для управления исходным кодом, конечной целью является машина Linux (это игровой сервер), поэтому используется тот же make-файл, что и в моей локальной сборке Linux. Таким образом, если я добавляю файл в проект / изменяю опцию компилятора, обычно добавляя / меняя -D, я делаю изменения первоначально под VS, а затем немедленно изменяю make-файл Linus, чтобы отразить те же самые изменения. Затем, когда я фиксирую, система сборки (Bamboo) получает изменения и выполняет собственную проверку сборки.
Трудно заработанный опыт говорит, что это на порядок проще, если вы строите так с первого дня.
Первый проект, над которым я работал, начинался только под Windows, меня наняли для его переноса на Linux, поскольку они хотели переключиться на однородную серверную среду, а все остальное - Linux. Переоборудование проекта Windows в подобную установку было довольно серьезным расходом усилий.
Проект номер два был сделан "сборкой двух систем" с самого первого дня. Мы хотели сохранить возможность использовать VS для разработки / отладки, поскольку это очень отлаженная среда IDE, но у нас также было требование для окончательного развертывания на серверах Linux. Как я упоминал выше, когда проект создавался с учетом этого с самого начала, он был совершенно безболезненным. Худшей частью был один файл: system_os.cpp, который содержал специфичные для ОС подпрограммы, такие как «получить текущее время с начала эпохи Linux в миллисекундах» и т. Д. И т. Д. И т. Д.
Опасаясь получить немного не по теме, мы также создали для этого модульные тесты, и наличие модульных тестов для отдельных частей ОС обеспечило большую уверенность в том, что они работали одинаково на обеих платформах.