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

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

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

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

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

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

много спасибо

Setareh

2 ответов


вы захотите посмотреть здесь:http://www.cmake.org/Wiki/CMake_Cross_Compiling Если вы делаете кросс-компиляцию. Тем не менее, я бы предложил вам установить виртуальную машину Linux, такую как virtual box, на вашей машине windows и наивно строить на Linux. Он будет компилироваться намного быстрее и вам не придется беспокоиться о составлении крест. Вы можете подключить диск windows с виртуальной машины linux, чтобы вы могли использовать одно и то же дерево источников. Виртуальная машина linux будет компилироваться намного быстрее, чем gcc под управлением windows.


ваше понимание CMake является правильным... он определит, как создать систему сборки, которую вы запрашиваете (или по умолчанию для платформы, на которой вы находитесь), на основе правил в вашем . Однако это не обязательно поможет вам скомпилировать для linux на машине windows, Если у вас не установлено что-то, что может быть нацелено на linux.

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

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

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