Кросс-компиляция в Windows и Linux - PullRequest
6 голосов
/ 07 января 2010

Я занимаюсь разработкой приложения, которое должно работать как в Windows, так и в Linux.

Пока что он работает на Linux с использованием GCC 4.4.1 с использованием моего Makefile.

Однако мне также нужно скомпилировать в Windows. Исходный код будет компилироваться в Windows, так как я # определил все области кода, которые разделяют различные компиляторы. I.e.:

#ifdefined (LINUX)
/* Do linux stuff */
#else
/* Do windows stuff */
#endif

И пока код очень прост, так как я только начинаю эту программу. По сути, я просто хочу проверить свою идею.

Однако это так же просто, как компилировать исходный код в Linux?

Затем, когда я хочу скомпилировать в Windows, я могу скопировать файлы на платформу Windows. Затем открыть файлы исходного кода в Visual Studio C ++ и создать проект, а затем скомпилировать для создания моего двоичного файла?

Ответы [ 7 ]

3 голосов
/ 07 января 2010

Использование Visual C ++ - это один из способов создания вашего C-проекта в Windows. Это не единственный способ.

VC имеет файлы проекта, которые вам нужно будет создать. Но потом поймите, что вам придется поддерживать конфигурацию сборки в двух разных местах (make & .vcproj).

Есть и другие варианты:

  • Вы также можете использовать make в Windows (например, в Cygwin )
  • Есть nmake , msbuild и т. Д.
  • Вы также можете использовать ant (который будет работать на обеих платформах).

На вашем месте я бы постарался использовать как можно меньше различных инструментов сборки.

3 голосов
/ 07 января 2010

Взгляните также на CMake.

2 голосов
/ 09 января 2010

Для простых консольных приложений (и даже более сложных, таких как инфраструктура Qt) вы можете создавать на Windows, используя MinGW . Сборка с MinGW очень похожа на сборку на Linux, и не исключено, что вы можете использовать тот же Makefile без каких-либо незначительных изменений или только с ними. Это дает главное преимущество: вам не нужно поддерживать два набора файлов Makefiles / project.

Вы также можете использовать Cygwin , который в основном является эмуляционным слоем API Linux для существенной функциональности. Однако использование Cygwin имеет тот недостаток, что он ссылается на собственную библиотеку cygwin1.dll. Это не может быть проблемой для вас, так как вы можете просто отправить эту DLL вместе с вашей программой. Вы также можете отключить использование этого параметра, используя параметр -mno-cygwin в качестве параметра компилятора для gcc / g++. Однако для некоторых функций требуется cygwin1.dll.

Я могу рекомендовать MinGW для сборки программ под Windows, которые изначально были написаны для Linux. Я использую это для различных программ командной строки, а для приложений с графическим интерфейсом я использую Qt framework с компилятором MinGW. Если вы хотите создавать приложения с графическим интерфейсом, вам определенно следует использовать платформу, не зависящую от платформы, поскольку это значительно упрощает процесс.

2 голосов
/ 07 января 2010

SCons - отличная кроссплатформенная система сборки. Вместо того, чтобы писать Makefile, вы пишете файл SConstruct, который обычно проще и при этом более мощный. Команда scons (по умолчанию) будет собираться для операционной системы, в которой она выполняется, предоставляя простой способ управления кроссплатформенными сборками.

1 голос
/ 10 января 2010

Вы можете использовать MinGW для кросс-компиляции двоичных файлов Windows напрямую из Linux.Большинство популярных дистрибутивов Linux теперь имеют пакеты MinGW, которые делают это очень просто.

Затем вы можете собрать все свои бинарные файлы Windows и Linux за один раз, на одной машине, из одного Makefile.Не нужно возиться, пытаясь заставить GNU Make работать должным образом в Windows, не говоря уже о том, чтобы беспокоиться о Visual Studio.

1 голос
/ 09 января 2010

CMake может помочь вам сохранить вашу сборку переносимой между несколькими наборами инструментов. Однако вам все еще приходится иметь дело с несовместимостью между ними на уровне языка и библиотеки.

Именно поэтому я рекомендую использовать GCC, autotools и т. Д. На всех платформах. В Windows набор инструментов GNU называется MinGW / MSys. Посмотрите на MSysGit для примера.

0 голосов
/ 07 января 2010

Да. Это так просто. Просто имейте в виду все время, что вам нужно заключить все ОС-специфические вещи в #ifdef с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...