Кросс-платформенная сборка под Windows с таргетингом на Linux с использованием CMake

Я разрабатываю программное обеспечение на C ++ для 32-разрядной версии Windows (с использованием MSVC ++), но поскольку я хочу иметь возможность использовать свое программное обеспечение на каждой платформе, я решил использовать CMake в качестве генератора сборки.

Поэтому я все еще новичок в CMake. Из руководств по CMake я понимаю, что для кросс-компиляции кодов сначала необходимо установить на хост-платформу цепочку инструментов, имитирующую целевую платформу. Затем, используя соответствующие компиляторы C и C ++ целевой платформы, предоставляемые этой инструментальной цепочкой, CMake сможет генерировать файлы сборки и т. Д.

Теперь я хочу собрать свой код для платформы Linux (GNU / Linux) на платформе Win32. Я попытался выполнить описанную выше процедуру, используя CMake в сочетании с Cygwin и используя gcc и g ++ в качестве компиляторов. Он отлично собирал, создавал make-файлы, и когда я ввел команду «make» в терминале Cygwin, сгенерированные make-файлы были «созданы». Теперь у меня есть исполняемый файл, который, как я надеялся, будет работать на платформе Linux. Но в Linux я получаю сообщение об ошибке: bash не может выполнить двоичный файл.

Используя имя исполняемого файла командного файла, я понял, что исполняемый файл, созданный с помощью вышеуказанной процедуры, имеет тип PE32, который предназначен только для Windows.

Теперь мой вопрос: правильно ли я понимаю процедуру кроссплатформенной сборки с использованием cmake? Или мне просто нужно использовать другую цепочку инструментов Linux под Windows, чтобы получить исполняемый файл Linux ELF? Какие наборы инструментов приходят вам в голову, которые дадут мне то, что я хочу?

Большое спасибо

Setareh


person Setareh    schedule 10.06.2013    source источник
comment
Я не знаю о cmake, но у qmake есть профили сборки для разных платформ. Возможно, вам стоит поискать опцию целевой платформы в документации cmake или что-то в этом роде.   -  person Ivan Kolmychek    schedule 10.06.2013
comment
metamod-p.sourceforge.net/   -  person stijn    schedule 10.06.2013
comment
Пример списка mkspecs для qmake на моем компьютере   -  person Ivan Kolmychek    schedule 10.06.2013
comment
@IvanKolmycheck Спасибо, вам все еще нужна цепочка инструментов на вашей хост-платформе для сборки для другой целевой платформы, или вы просто указываете профиль сборки в qmake, и qmake генерирует соответствующие make-файлы для целевой платформы? Я имею в виду, могут ли компиляторы, перечисленные в ваших mkspecs, использоваться напрямую через qmake или же задействована какая-то другая процедура (например, сторонняя инструментальная цепочка)?   -  person Setareh    schedule 10.06.2013
comment
@ user2470116 Qmake автоматически генерирует make-файлы для набора инструментов, но его все равно необходимо установить через диспетчер пакетов вашего дистрибутива.   -  person Ivan Kolmychek    schedule 10.06.2013


Ответы (2)


Вы можете посмотреть здесь: cmake-toolchains (7) если вы выполняете кросс-компиляцию. Тем не менее, я бы посоветовал вам установить виртуальную машину Linux, такую ​​как виртуальный ящик, на свой компьютер с Windows и наивно строить на Linux. Он будет компилироваться намного быстрее, и вам не придется беспокоиться о кросс-компиляции. Вы можете смонтировать диск Windows из виртуальной машины Linux, чтобы вы могли использовать одно и то же исходное дерево. Виртуальная машина linux компилируется намного быстрее, чем gcc, работающий под Windows.

person Bill Hoffman    schedule 16.06.2013
comment
Большое спасибо за ответ. Теперь я понимаю свои варианты. - person Setareh; 18.06.2013

Вы правильно понимаете CMake ... он определит, как создать систему сборки, которую вы запрашиваете (или она используется по умолчанию для платформы, на которой вы сейчас работаете), на основе правил в вашем CMakeLists.txt файле. Однако это не обязательно поможет вам скомпилировать для Linux на машине с Windows, если у вас не установлено что-то, что может работать с Linux.

Чтобы скомпилировать ориентированный на Linux, вам нужно будет использовать компилятор Linux. Ссылка , размещенная @stjin, расскажет вам, как чтобы установить его на cygwin. Затем, чтобы настроить сборку CMake, сделайте это в терминале:

CC=gcc-linux CXX=g++-linux cmake . [options]

Это укажет CMake найти специальные компиляторы, предназначенные для Linux. Надеюсь, после компиляции с этими компиляторами вы сможете работать в Linux.

person SethMMorton    schedule 10.06.2013
comment
@Stjin и SethMMorton, Спасибо за комментарии и ссылку. Но веб-сайт metamod, по-видимому, изменил свой двоичный дистрибутив, теперь я получаю оттуда только файл metamod.dll, и я понятия не имею, как я могу установить кросс-компиляторы Linux в Cygwin с этим. Любые идеи? - person Setareh; 12.06.2013