Как скомпилировать приложение с гитхаба
Я загрузил мертвую простую программу для Windows из GitHub ( это , если это уместно). Я загрузил его в виде файла ZIP, но не могу понять, как его установить. Это написано на C, я думаю. Нужен ли мне компилятор? (Visual Studio?) Есть что-то простое, что мне не хватает?
Извините, это, очевидно, серьезная проблема с нубами. Как? Там нет исполняемого файла. Вам, вероятно, понадобится Windows SDK и связанные заголовки C для компиляции программы. Обычно упоминаются зависимости, а инструкции по компиляции включаются в файл Readme. В этом случае ни один из них не включен, поэтому вы должны попросить владельца репо / автора проекта получить соответствующую информацию. Вам нужен компилятор. Я хотел бы обратиться к разработчику и спросить, как его построить. Обычно, например, программное обеспечение для Linux, поставляемое в качестве источника, содержит инструкции по сборке, но я не вижу его на Github. Вы не загрузили реальную программу, вы загрузили исходный код программы и, да, вам нужно сначала скомпилировать ее. Судя по make-файлу, вам нужно собрать все, что есть в MINGW.Github в основном используется программистами для совместной работы над проектами. Параметр «Загрузить ZIP» загружает копию исходного кода на ваш компьютер. Это , как правило , 1 не содержит копии скомпилированных используемых исполняемых файлов / двоичных файлов (например, EXE - файлы)
Releases - это функция Github для доставки программного обеспечения конечным пользователям (которые обычно не заинтересованы в реальном кодировании). Релизы сопровождаются примечаниями к выпуску и ссылками для загрузки программного обеспечения или исходного кода. Это первое место, где вы должны проверить двоичные файлы .
В вашем случае на странице релизов предлагаются файлы для загрузки и настройки.
Однако многие проекты не будут иметь никаких выпусков (особенно не для Windows), и в этом случае вы можете выполнить одно из следующих действий:
Поиск двоичных файлов в других местах в Интернете. Обычно поисковые системы, такие как DuckDuckGo (или Google , если вы предпочитаете), легко найдут то, что вы хотите. Попробуйте найти <application name> for Windows или <application name> exe .
Скомпилируйте это самостоятельно. Вы должны иметь хотя бы некоторые базовые знания языка программирования, чтобы иметь возможность сделать это. Здесь снова, поисковые системы могут быть чрезвычайно полезными. Попробуйте найти compile <application name> on Windows или MinGW compile <application name> .
Здесь я рассмотрю основы компиляции утилит для Widnows:
Выполните следующие команды в cmd или powershell :
1 Примечание. Иногда bin среди загруженных файлов может быть папка , которая должна содержать исполняемые файлы / исполняемые файлы
Также смотрите Cygwin и GOW, если вы хотите использовать утилиты командной строки GNU / Linux в Windows. Я делаю несколько последних версий некоторых полезных исполняемых файлов, доступных для скачивания здесь .
Спасибо, это отличный ответ, и я изменил его, чтобы пометить как окончательный. (Ранее я редактировал свой вопрос, чтобы было яснее, что это то, что я искал, но по какой-то причине BoundaryImposition отредактировал его.) Я не думаю, что это удовлетворяет просьбу Айбоба о вознаграждении, но это между вами и ней / ним. @JoshFriedlander Рад быть полезным! Я добавлю больше к ответу позже . Да, я болтал с JourneymanGeek (Aibobot), он собирается ждать несколько дней, пока новые ответы не появятся. Этот проект может не иметь никаких, но обратите внимание, что большинство проектов, вероятно, будут иметь зависимости , а это значит, что если вы идете по пути компиляции, вам может понадобиться отследить библиотеки, от которых зависит программное обеспечение, загрузить их и установить их ( или скомпилировать их тоже). Обычно это не так просто, как просто запустить make-файл; некоторые из них могут даже иметь другие сценарии сборки, такие как cmake, скрипт настройки и т. д. Действительно ли процесс настолько прост в большинстве случаев? Какая часть утилит github требует существенно больших знаний для их компиляции, чем то, что Вы описали здесь?Вы оглядываетесь вокруг и находите установщик на странице релиза . Конечно, вы можете скомпилировать исходный код, но я не думаю, что вы этого хотите.
Согласовано. Если вам нужно спросить, вы не хотите компилировать из исходного кода. Если вам нужно спросить, вы, вероятно, не должны устанавливать программное обеспечение, которое доступно только в исходной форме . Я склонен согласиться с @jpaugh. Хотя сборку из исходного кода очень возможно, а иногда и необходимо, это не то, что вы можете просто пойти и спросить «как построить программу на C» в общем виде. Просто слишком много различий. Некоторые удачные программы так же просто, как «скомпилировать эти файлы». Другим нужны make-файлы. Некоторым нужны зависимости, которые будут загружены первыми. Процесс настройки для сборки может быть сложным и не обязательно дружественным к программисту. Прежде всего, однако, вы хотите найти файл в проекте, который объясняет, как построить, потому что особенности зависят от проекта. @jpaugh - Я бы сказал, что у вас гораздо больше шансов установить вредоносное ПО, загрузив исполняемый файл - вредоносное ПО редко бывает открытым. Предполагая, что вы действительно можете читать язык. Я частично компилирую вещи на Linux, и я не могу читать / не читать ни одного источника. Даже если бы я мог, я не собираюсь пересматривать каждый.Файлы .c и .h имеют исходный код на языке C.
Вам нужно будет установить компилятор C, такой как Visual Studio, tcc или что-то подобное, загрузить проект и затем скомпилировать его для запуска.
В противном случае у проекта есть страница релиза ( здесь ), которая даст вам доступ к предварительно скомпилированной версии, чтобы сэкономить ваше время и усилия.
Если он должен был скомпилировать его, то это обычно объясняется в файле readme, который вы даже не упоминаете, что он должен искать. Он предназначен для перехода на страницу релиза, он не просто «отказывает (установка компилятора), он должен перейти на страницу релиза» Конкретный проект обычно настраивается для использования с определенным набором инструментов компиляции (называемым «цепочкой инструментов»), который обычно упоминается в файле readme (в UNIX и кроссплатформенных проектах он обычно называется BUILD или INSTALL) , В менее чем звездно поддерживаемых проектах или проектах для сред с несколькими известными наборами инструментов пользователь должен угадывать по формату и / или содержимому файлов проекта.Этот ответ будет касаться общего вопроса о создании приложения Windows только для исходного кода (на языке C). Если вам повезло, как OP, вы можете найти предварительно скомпилированные двоичные файлы.
Первое, о чем следует знать, это то, что нет единого способа создать приложение из исходного кода. Вариантов примерно столько же, сколько разных проектов. Тем не менее, вот несколько общих шагов:
Если вам повезет, проект предоставит инструкции по сборке, обычно внутри README файла. Иногда может также существовать INSTALL файл или другая доступная документация. Если таковые имеются, следуйте инструкциям. Это ваша лучшая ставка.
Как уже говорили другие, к сожалению, очень сложно восстановить необходимые этапы сборки без инструкций. Тем не менее, мы можем, по крайней мере, сделать попытку изо всех сил здесь, которая будет работать для большинства простых проектов.
В отсутствие инструкций следующий порт захода - проверить, какой инструмент сборки необходим.
Если вы найдете файл с расширением .sln или .vcxproj , это, вероятно, проект MSBuild / Visual Studio. Загрузите копию Visual Studio Community или Express (для C ++), откройте там этот файл проекта и нажмите кнопку воспроизведения на панели инструментов (или воспользуйтесь меню сборки).
Если вы найдете Makefile , это, вероятно, потребует make . Но здесь все становится еще сложнее, поскольку используется так много независимых и несовместимых систем make .
Поскольку он нацелен на Windows, он, вероятно, будет использовать MinGW . Загрузите его копию, запустите MSYS из меню «Пуск», перейдите ( cd ) в каталог, в котором находится ваш проект, и запустите make .
В редких случаях, когда вместо этого используется Cygwin (к сожалению, нет простого способа узнать, но если MinGW создает ошибки с ошибкой, связанной с «posix», это достойная ставка), вам придется вместо этого установить Cygwin . К сожалению, это не создает собственные двоичные файлы Windows - вам придется каждый раз запускать программу через Cygwin.
«Инструмент сборки» может представлять собой пользовательский сценарий по имени build.bat или аналогичный. В этом случае вам придется либо открыть его и посмотреть, что внутри, либо попробовать запустить его и посмотреть, в чем заключаются ошибки. Если вы откроете его и увидите упоминания GCC , вернитесь к 2.2.1. Шаг MinGW, но запустите пользовательский скрипт вместо make .
Возможно, что нет никакого инструмента для сборки вообще. Если все, с чем вы сталкиваетесь, - это отдельный файл .c или .cpp файл, то, вероятно, достаточно просто, чтобы вы могли выполнить прямую компиляцию. Это, опять же, почти всегда MinGW , поэтому загрузите его, запустите оболочку MSYS, перейдите в каталог и вызовите либо, gcc либо по g++ мере необходимости, например gcc -o program.exe program.c
Инструменты сборки
Инструмент для сборки позволяет строить проект с очень мало команд. Для большинства проектов с более чем одним исходным файлом где-то будет задействован инструмент сборки. Существует несколько инструментов сборки, но наиболее распространенными являются:
make , используется повсеместно в Linux и все чаще встречается в Windows. Использование проектов make обычно можно определить по наличию Makefile .
MSBuild специфичен для Windows и обычно рассматривается в сочетании с Visual Studio. Обычно они сопровождаются файлом *.sln или *.vcxproj файлом.
компилированные инструменты
Набор инструментов является компилятор и вспомогательные инструменты. Как и у инструментов сборки, их несколько, и они обычно используются с одним из инструментов сборки.
MSVC - это набор инструментов Microsoft. Это наиболее распространенный набор инструментов для разработки Windows. Это обычно используется с системой MSBuild, а сборки обычно создаются с помощью Visual Studio. Тем не менее, современные проекты MSVC можно использовать Makefile тоже.
GCC ( MinGW ) - это порт GCC для Windows. Обычно используется с make . Если проект изначально ориентирован на Windows и имеет Makefile , вероятно, для MinGW-GCC.
GCC ( Cygwin ) создает POSIX-совместимую среду. Это позволяет напрямую компилировать большинство программ, написанных для Linux или Unix, и работать напрямую под Windows. Совсем недавно в Windows 10, Bash на Ubuntu на Windows является альтернативой. GCC обычно используется в сочетании с make .
Каркасы и библиотеки
Библиотеки - это повторно используемые наборы кода, написанные другими людьми, от которых зависят многие программы, чтобы не изобретать велосипед. Вы должны иметь эти зависимости, доступные для построения проекта. Если вам повезет, они будут включены в вашу первоначальную загрузку, но это не всегда так.
Фреймворки - это фактически коллекция библиотек. Многие проекты используют один фреймворк, который вам также понадобится. Они также часто имеют собственную систему сборки, но перечислить их все было бы невозможно.
Самое сложное - это работа с дополнительными фреймворками и библиотечными зависимостями. Если, скажем, проект использует Qt - тогда вам понадобится весь этот беспорядок, чтобы правильно его построить. Это огромная задача, и если у вас нет опыта, вероятно, лучше просто попросить других о прямой помощи здесь.
В прошлой статье вы подняли окружение для разработки и компиляции gcc под Windows (или установили виртуальную машину с Ubuntu/Debian), а так же зарегистрировались на GitHub. Сейчас мы напишем простейшую программу на C и научимся простейшему использованию git и make.
Для начала вы должны выбрать текстовый редактор, в котором будете писать код. Под Linux-ом это может быть консольный редактор nano или vim (оба предустановлены в Debian и Ubuntu), графический gedit или sublime_text (предустановлен в Debian).
Например, для Notepad++ со стандартным путем установки это выглядит так:
Команда alias задает псевдоним какой-то команды в bash. В данном случае, вы дали знать оболочке, что хотите, чтобы при обращении к команде “editor” у вас вызывалась программа, расположеная по пути “C:\Program Files (x86)\Notepad++\notepad++.exe”.
Скорее всего, это было последнее отличие для Windows, и в следующих статьях материал будет актуален для обеих систем.
Откроем консоль bash и создадим новую директорию с именем test1 в нашей домашней директории. Для этого введем команду:
Теперь войдем в нее. Аналогично,
Заголовок окна и строка приглашения (та, что на строку выше “$” в Windows, в той же строке перед символов “$” в Linux) должна измениться и отображать текущий путь. Нетрудно заметить, что он начинается с символа“
”. В Unix-системах этот символ означает домашнюю директорию.
Теперь же приступим непосредственно к редактированию кода.
В консоли bash выполним следующую команду (если вы используете Sublime Text 3 под Linux, то вместо editor используйте sublime_text):
Тем самым мы откроем текстовый редактор для файла main.c в текущей директории. Эта команда удобна тем, что сработает и в Windows, и в Linux с любым текстовым редактором (кроме Sublime Text, если это не было настроено вручную). Если такого файла не существовало ранее, то этот файл будет создан.
Введем в него следующий код:
И сохраним файл. Теперь этот исходный код необходимо скомпилировать. Введем команду:
В результате у нас получится файл main (или main.exe под Windows). Но давайте сначала разберем саму команду.
И так, команда состоит из 2 частей: собственно команды и ее параметров. В качестве команды здесь у нас выступает имя компилятора — gcc, а вот параметры рассмотрим подробнее.
Параметр -o задает имя выходного файла скомпилированой программы. Если его не указывать, то выходной файл компилятора будет называться a.out (таким образом, этот параметр необязательный).
Далее следует последний и обязательный параметр — имя компилируемого файла. Тут все просто. Этот параметр нельзя опускать (иначе компилятор не узнает, что надо компилировать).
Можем проверить работу нашей программы, введя в консоли:
Если на экране вывелась строка “Hello, world!”, то вы все сделали правильно.
Git — это такая система контроля версий. Это значит, что она используется для хранения всей истории изменения проекта, быстрого перехода между версиями проекта, а так же для удобства командной разработки. Основной объект оперирования (то, с чем вы будете работать) — это репозиторий. Для человека он выглядит как обычная директория с файлами, в которой также есть и скрытая папка .git, в которой хранится история изменений и другая служебная информация.
Начнем работу. Для того, чтобы создать пустой репозиторий в текущей папке, введем команду:
(для создания новой пустой папки и репозитория в нем нужно ввести имя папки после “init”). В данный момент все изменения (а на данный момент для git-а файл main.c, который мы создали ранее, это “изменение”) еще не добавлены в репозиторий (т.н. “unstaged changes”). Мы можем просмотреть текущее состояние репозитория (т.е. все неизмененные, измененные и недобавленные файлы) с помощью команды
Видим, что файлы, которые создали мы и компилятор находятся в списке “Untracked files”. Это означает, что они еще не добавлены в репозиторий или не добавлены в текущий коммит.
Коммитом называется операция фиксации всех изменений, сделанных в репозитории и добавленых к коммиту. Также к коммиту обычно прилагается комментарий, описывающий что именно изменилось во время данной фиксации. На практике очень важно писать осмысленные и правильные комментарии к коммиту.
Давайте добавим наш файл к коммиту и зафиксируем изменения.
После этого должен создасться первый коммит, а в выводе команды “git status” файл main.c должен исчезнуть из списка “Untracked files”. С помощью команды “git log” можно просмотреть список коммитов.
Обратите внимание, мы не просто так добавили в репозиторий только файл с исходным кодом. За редким исключением в репозиторий добавляются только plaintext-файлы, т.е. файлы, которые содержат человекочитаемый текст. Binary-файлы в репозиторий добавлять не нужно (в git существует даже специальный файл, в который можно записать список или маску всех бинарных файлов проекта, чтобы случайно не добавить их).
Давайте теперь внесем изменения в наш код.
Скомпилируем программу заново (используя ту же команду, что и в прошлый раз) и проверим результат ее выполнения, введя:
Вместо самой команды вывелся полный путь к вызываемому файлу, потому что оболочка командной строки автоматически раскрывает команду в полный путь к файлу.
Теперь нужно добавить измененный файл к текущему коммиту. Делается это той же командой “git add” (как и добавление нового файла).
И так, теперь в списке коммитов отображается 2 коммита. Для самого git коммиты — это специальные файлы в формате patch, которые позволяют на уровне строк (т.е. даже если в строке будет отличаться всего один символ, будет полностью удалена старая строка и добавлена измененная) находить разницу между файлами. Чтобы посмотреть, как выглядит коммит, использутся команда “git show”.
Теперь рассмотрим, как отправлять код на удаленный репозиторий (например GitHub). Переходим по этой ссылке и создаем репозиторий с названием “test1". Настройки должны выглядеть как на скриншоте ниже.
Из всех команд, которые предлагает нам GitHub, нас интересует только та, которая начинается с “git remote add”. Копируем ее и выполняем в консоли. Эта команда добавляет удаленный адрес репозитория, в который git сможет отправлять все сделаные вами изменения.
(это пример команды). Здесь “origin” — это имя источника (удаленного репозитория). “origin” — это имя для основного источника (их может быть несколько). После этого введем:
Как видим, в этой команде указывается имя источника, а так же название ветки “master”. Дело в том, что у репозитория git может быть несколько ответвлений, которые после могут сливаться в главное. Но это мы пока рассматривать не будем.
GNU make — это система сборки проектов. Сейчас наш проект состоит из одного файла и собирали мы его одной командой, однако на практике файлов могут быть сотни и тысячи, и для того, чтобы не компилировать каждый файл вручную и нужна система сборки.
make имеет очень простой синтаксис. У make есть так называемые “цели”, т.е. задачи, которые система сборки будет выполнять. Цели задаются таким образом: “<имя_цели>:”. Имя цели — строчные английские символы и цифры. Команды внутри цели — это обычные консольные команды bash. Они должны быть отделены от начала строки одним символом табуляции (нажатие кнопки Tab, таким образом make понимаем, что это именно команда, а не цель). Сам файл с целями и командами make должен называться “Makefile” (обязательно с большой буквы). Цель по умолчанию называется “all”.
Рассмотрим пример простейшего Makefile:
(если будете копировать здесь и далее, то отступы сделаны с помощью пробелов, но надо их сделать с помощью клавиши Tab).
Здесь задана только одна цель — “all” и одна команда, которой мы и раньше компилировали наш исходник. Добавим еще две цели, одну для очистки директории от мусора (за мусор примем скомпилированый файл) и тестирования нашего проекта.
Мы добавили две цели: в цели test — команды для тестирования, которые мы использовали ранее, а в цели clean — команда для удаления скомпилированного файла “main” (“main.exe” для Windows).
Протестируем полученный файл:
После этого у вас должен скомпилироваться код main.c, вывестись 2 результата запуска (с параметром и без), а потом удалиться исполняемый файл (“make clean” завершится с ошибкой, т.к. одного из файлов в зависимости от ОС у вас не будет)
Как видно, в файле часто используется название “main”. Для того, чтобы вынести его, в make есть поддержка переменных. Переменные задаются вне целей: “<имя переменной>:=<значение>”, каждая на новой строке. В командах значение переменной можно использовать с помощью конструкции “$(<имя переменной>)”. Добавим переменную target в наш Makefile:
Протестируйте этот файл еще раз.
Самостоятельное задание: добавьте Makefile в репозиторий и отправьте изменения на GitHub.
Чтобы установить значение опции, отличное от "по умолчанию", необходимо дописать -DНАЗВАНИЕ_ОПЦИИ=Значение к команде конфигурирования. Команда после этого может выглядеть, например, так:
Чтобы сделать такое действие в CLion, необходимо перейти в: Settings -> CMake -> CMake options.
Если используется Hunter (пакетный менеджер), то прописываются его настройки
На этапе конфигурирования, CMake ожидает файл tools/gate/cmake/HunterGate.cmake .
Если этот файл не существует, возможны 2 варианта:
- Либо (если используется шаблонный репозиторий) необходимо обновить подмодули:
git submodule update --init --recursive
Дополнительные опции для компилятора (могут отсутствовать)
Подключение зависимых библиотек
Затем осуществляется подключение библиотек, в которых нуждается проект (Boost, GTest, Threads и т.д.)
Указания для Hunter о необходимо коллекционирования указанных пакетов
Указания о том, какие пакеты будут использованы (ожидается их наличие)
CONFIG - ключевое слово, показывающее маску названий конфигурационных файлов.
REQUIRED - обязательность подключения пакета (иначе - ошибка).
Добавление целей сборки
После настройки окружающией среды пишется информация о том, что ожидается получить в результате сборки
Указание директорий с заголовочными файлами
Указание библиотек для линковки
Названия библиотек из Hunter, как правило, имеют вид LibraryName::ComponentName .
Данные о библиотеках из пакета, добавленного через find_package хранятся в переменных. Например, для Threads: $
Для сборки тестирования необходимо наличие:
- Добавления пакета googletest (GTest в Hunter)
- Цели для сборки исполняемого файла
- Линковки gtest_main и gtest (GTest::main и GTest::gtest в Hunter) к цели
- Включенного тестирования в конфигурационном файле
Можно добавлять несколько тестовых целей под разными названиями. И даже с использованием разных фреймворков.
Для сборки и выполнения тестирования необходимо выполнить следующую команду (ожидается предварительное конфигурирование):
Пример тела конфигурационного файла с тестированием:
Для удобства в CLion необходимо добавить конфигурацию сборки google test.
Начало конфигурации. Как правило, его трогать не надо.
Далее прописываются цели, которые будут проанализированы на процент покрытия.
Конец конфигурации. Как правило, не надо трогать.
Для начала необходимо настроить окружение. Как правило, это не надо трогать
Далее необходимо указать jobs'ы, которые будет выполнять Travis. Jobs содержит название и команды.
К таким относятся, например, правила для веток и для уведомлений. Например:
Создаю проект c qMake, main.cpp не заменяю
Добавляю все файлы из папки
Ккак мне нужно выполнить чтение из файла если с проектом прилагается test_file_binary.txt?
передать его в аргументах командной строки, очевидно. Допустим у вас скомпилировался проект и получился бинарник a.exe, вам нужно запустить его из командной строки командой: "a.exe test_file_binary.txt", тогда программе передастсе имя файла и всё будет работать. @ zcorvid попробовал.` Error: Unable to open filetest_file_binary.txt ` пишет в командной строкеВ общем решил попробовать "собрать" ваш пример. Работаю тоже в "Qt" :3.
Разобью на действия :
1. Скачал проект
2. Разархивировал проект
3. В той же директории создал проект на С++ (вторая картинка)
4. После чего добавил в проект все файлы кроме Makefile файла. Я так и не понял в чём именно был собран скачанный проект и не стал заворачиваться с ним
5. Также заменил файл main.cpp на разархивированный из проекта.Можно также просто скопировать вставить с заменой всего содержимого.
6. Воаля всё собирается :3
7. Также желательно в ту папку в которой лежит собранный проект (в винде .exe, в линуксе ?? ) положить тестовые текстовые файлы (.txt)
8. В винде : После чего можно зайти в командную строку (cmd) и зайти в папку в которой собран проект (через cmd разумеется) и ввести
команду exper.exe test_file_binary.txt
В линуксе всё печальней :(
Выполняем все действия до 7 пункта. После чего сталкиваемся что исполнительного файла как такового полностью нету. В винде .exe файл при "запуске" сразу говорит каких файлов тебе не хватает после чего, ты просто копируешь их из папки где лежит компилятор в директорию собранного проекта. В линуксе надо устанавливать linuxdeployqt ( sudo apt-get install libqt5webkit5-dev ) после чего выполнять команду подтягивающую библиотеки, но увы у меня не вышло (третья картинка), притом что у меня linuxdeployqt установился.
Читайте также: