Устаревшая функциональность кросс-компиляции неожиданно исчезла - как я могу выяснить, что произошло? - PullRequest
0 голосов
/ 13 апреля 2019

Я развиваюсь в очень ограниченной среде. По бюрократическим причинам мне нужно сделать следующее:

(1) Скомпилируйте исполняемый файл в Windows для цели Linux;

(2) Делать это без установки нового программного обеспечения или пакетов;

(3) Сделайте это через командный терминал Cygwin.

Это фиксированные константы, которые я абсолютно не могу изменить.

Ранее по причинам, которые я не могу объяснить, Cygwin по умолчанию компилировал для цели Linux, и я мог поддерживать этот процесс без проблем. Исследуя проблему, я не уверен, как она в конечном итоге нарушает это поведение.

Тем не менее, ранее сегодня я представил скрипт коллеги, чтобы упростить процесс сборки, поместив CMakeFiles и CMakeCache.txt в каталог сборки, а не в папку моего проекта. Как часть этого, мои оригинальные каталоги CMakeFiles и CMakeCache были потеряны.

Затем я попытался вручную экспортировать пути CC и CXX в компилятор для компиляции, пробуя каждый исполняемый файл * gcc.exe и * g ++. Exe, который я мог найти на своем компьютере. Мне известно, что большинство, если не все, кроссплатформенные инструменты компиляции помечают исполняемые файлы кросс-компиляции с именем Linux, но таких файлов не было найдено ни в одном из дисков Cygwin.

Я дополнительно вышел из системы, и у меня есть еще один пользователь, чтобы попытаться собрать его, но это дало те же результаты.

Я попытался восстановить файлы CMakeFiles и CMakeCache, которые все еще находились в корзине, но их повторное использование оказалось неэффективным.

Что я знаю:

  1. В Cygwin есть каталог / opt / gcc-tools /, в котором нет исполняемого файла gcc, но во время первоначальной установки проекта в систему кто-то возился с ним. В каталоге / opt / нет других установленных файлов или программ.

  2. Установка путей CC и CXX обратно на ноль приводит к тому, что CMake по умолчанию использует / usr / bin / cc и / usr / bin / c ++. Версии этих файлов для Linux отсутствуют.

  3. Установлен MinGW, и я не уверен, связано ли это с кроссплатформенностью.

  4. В разделе usr / share / cmake / modules / platform Cygwin есть различные файлы LINUX- {GNU / INTEL / CLANG} .cmake. Они, вероятно, просто используются для проверки кросс-компиляции, но если их можно отредактировать, чтобы все заработало, у меня не было бы возражений.

Мой файл build.sh выглядит так:

export CC=/usr/bin/gcc.exe
export CXX=/usr/bin/gcc.exe

pushd build > /dev/null

cmake ..
make all install -j8


popd /dev/null

и ранее был простым

cmake .
make

без установки или -j8

Я понимаю, что это сложная проблема для отладки без доступа к терминалу и системе. Моя единственная цель - заставить cmake снова выплевывать файлы a.out, а не файлы a.exe. Надеемся, что это позволит пролить некоторый свет на то, как система работала в самом начале процесса.

...