Я развиваюсь в очень ограниченной среде. По бюрократическим причинам мне нужно сделать следующее:
(1) Скомпилируйте исполняемый файл в Windows для цели Linux;
(2) Делать это без установки нового программного обеспечения или пакетов;
(3) Сделайте это через командный терминал Cygwin.
Это фиксированные константы, которые я абсолютно не могу изменить.
Ранее по причинам, которые я не могу объяснить, Cygwin по умолчанию компилировал для цели Linux, и я мог поддерживать этот процесс без проблем. Исследуя проблему, я не уверен, как она в конечном итоге нарушает это поведение.
Тем не менее, ранее сегодня я представил скрипт коллеги, чтобы упростить процесс сборки, поместив CMakeFiles и CMakeCache.txt в каталог сборки, а не в папку моего проекта. Как часть этого, мои оригинальные каталоги CMakeFiles и CMakeCache были потеряны.
Затем я попытался вручную экспортировать пути CC и CXX в компилятор для компиляции, пробуя каждый исполняемый файл * gcc.exe и * g ++. Exe, который я мог найти на своем компьютере. Мне известно, что большинство, если не все, кроссплатформенные инструменты компиляции помечают исполняемые файлы кросс-компиляции с именем Linux, но таких файлов не было найдено ни в одном из дисков Cygwin.
Я дополнительно вышел из системы, и у меня есть еще один пользователь, чтобы попытаться собрать его, но это дало те же результаты.
Я попытался восстановить файлы CMakeFiles и CMakeCache, которые все еще находились в корзине, но их повторное использование оказалось неэффективным.
Что я знаю:
В Cygwin есть каталог / opt / gcc-tools /, в котором нет исполняемого файла gcc, но во время первоначальной установки проекта в систему кто-то возился с ним. В каталоге / opt / нет других установленных файлов или программ.
Установка путей CC и CXX обратно на ноль приводит к тому, что CMake по умолчанию использует / usr / bin / cc и / usr / bin / c ++. Версии этих файлов для Linux отсутствуют.
Установлен MinGW, и я не уверен, связано ли это с кроссплатформенностью.
В разделе 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. Надеемся, что это позволит пролить некоторый свет на то, как система работала в самом начале процесса.