Как создать exe файл c
Одним из современных методов разработки ПО на сегодня считается создание программных компонентов, из которых может быть сформирован 1) программный комплекс любой сложности. Он постепенно заменяет старую методику создания монолитных программ 2) .
Отличным примером среды разработки, поддерживающей указанный современный метод, является BlackBox Component Builder, которая сама построена по данной методике. См. также:
Школьная сборка — полностью русифицированая среда, дополненная набором примеров для начинающих и методическими рекомендациями.Общие принципы создания exe-файлов
Для создания exe-файлов используется команда DevLinker.LinkExe. Например, самое маленькое приложение будет выглядеть так:
Этого уже достаточно для того, чтобы писать программы с использованием Windows API , например:
Если вы хотите задать иконку для exe-файла, измените команду линковки, например, на такую:
Иконка приложения будет взята из файла applogo.ico и включена в состав MoveWin.exe.
При любом варианте линковки требуется перечислить все модули, которые необходимо включить в файл. Это касается не только модулей, решающих конкретную задачу, но и всех импортируемых ими модулей. Модули в списке должны перечисляться в том порядке, в котором они будут загружаться в память. Например, имеется модуль:
Список линкуемых модулей должен выглядеть так: Log TestExe. На самом деле, указанный список модулей неполон, потому как модуль Log сам по себе никаких действий не производит. Для того, чтобы эта программа заработала, нужно добавить модуль реализации журнала, например WinConsole: Kernel+ Log Files Dialog Math Strings WinConsole TestExe. Обратите внимание, как распух список при добавлении одного модуля - пришлось перечислить всё, что импортирует он, и всё, что импортируют остальные модули. Знак »+» после модуля Kernel обязателен, и указывает на модуль ядра. Модуль Kernel используется, если в программе создаются объекты с помощью NEW (то есть практически всегда).
Если используется русифицированная (например, школьная) версия Блэкбокса, то первым в списке нужно указывать модуль National
Для автоматического создания списка необходимых модулей можно воспользоваться подсистемами Alm01Gather, Bbt или ert0dev. Для этого их нужно установить.
Вариант первый
Создание простого исполняемого файла выполняется командой вида
Для нашего примера команда будет выглядеть так:
Параметр dos перед именем файла указывает на необходимость создания консольного приложения. Для обычной программы никаких параметров указывать не надо. Файл будет создан в рабочем каталоге блэкбокса.
Полученная нами программа при запуске не выдаст ничего. Для того, чтобы она заработала, необходимо добавить пару строк:
Это связано с тем, что при исполнении exe, созданного командой DevLinker.LinkExe, выполняются все секции BEGIN всех перечисленных модулей. После того, как последний модуль отработает, вызываются все секции CLOSE, только в обратном порядке.
См. также: Console, модуль ConsoleTest.
Вариант второй
Создание «упакованных» файлов — набор необходимых для работы файлов (произвольного типа) приписывается в конец собранного exe-файла. Во время работы программы эти файлы доступны для чтения при использовании специальной реализации Files — HostPackedFiles.
Обычно придерживаются следующей схемы:
статически линкуется минимальный exe-файл — стандартный blackbox.exe (содержит динамический загрузчик модулей StdLoader) с добавлением HostPackedFiles; кодовые файлы модулей с ресурсами и прочими файлами припаковываются к этому базовому exe; при запуске программы она работает как обычный ББ — модули, ресурсы и пр. загружаются динамически. Разница заключается только в расположении файлов.Припакованные файлы видны «под» файлами из ФС операционной системы: если в ФС и в наборе припакованных файлов содержится файл с одним и тем же именем (и путём), то читается файл из ФС. Эта схема аналогична серверной конфигурации ББ, и при её использовании добавляет «третий уровень» для чтения:
Данная схема может быть полезна при распространении и поддержке ПО, если одним из ключевых требований является минимум файлов в рабочем комплекте:
Базовая версия распространяется в виде одного exe (обычный ББ, к которому припакованы компоненты данного ПО). Промежуточные обновления распространяются в виде архивов с набором изменившихся файлов, которые распаковываются рядом с exe и перекрывают старые версии в припакованном наборе. Это позволяет существенно снизить размеры файлов обновлений для «крупного» ПО. Только при накоплении большого числа обновлений выпускается новая базовая версия в виде одного exe.Команды для создания припакованных файлов описаны в документации модуля DevPacker. Пример использования имеется в следующем разделе.
Полноценный самостоятельный exe-файл на основе BlackBox
В русифицированной школьной версии BlackBox есть подсистема «Тренинг», содержащая диалоговое окно «тренажёра по склонению числительных». Однажды по просьбе А. И. Попкова мною (Александр Ильин) был изготовлен exe-файл, который позволял запустить данный тренажёр без установки BlackBox, т.е. достаточно было получить и запустить файл Training.exe. Тренажёр сотоял из единственного модуля Тренинг\Mod\Chals.odc (фигурирует как «ТренингChals» в параметрах команды LinkExe) и единственной диалоговой формы Тренинг\Rsrc\Chals.odc. Ниже приводится последовательность команд для создания Training.exe (всегда выполняйте все команды, иначе Блэкбокс после перезапуска будет работать неправильно из-за подмены модуля Config, об этом ниже):
Для того, чтобы при запуске Training.exe сразу же отображалось окно тренажёра, перед линковкой выполняется подмена стандартного модуля Config путём компиляции модуля ТренингConfigToPack (см. ниже). После линковки стандартный модуль возвращается на место путём компиляции исходного текста оригинального Config. После этого в созданный Training.exe командой DevPacker.PackThis добавляются два файла ресурсов: диалоговая форма «Тренинг/Rsrc/Chals.odc» и файл меню «Тренинг/Rsrc/MenuToPack.odc» (см. ниже). Последний при упаковке переименовывается в «System/Rsrc/Menus.odc», чтобы заменить собой стандартное меню BlackBox.
Модуль Config, находящийся в файле «Тренинг\Mod\ConfigToPack.odc»:
Файл меню «Тренинг\Rsrc\MenuToPack.odc»:
Автоматизация компоновки
Как видно из предыдущего примера, компоновка простого приложения состоит из 4 щелчков мыши по определённой последовательности коммандеров, а ошибка в этой последовательности может обернуться временной потерей работоспособности BlackBox. К счастью, можно свести этот процесс к одному щелчку мыши, или даже нажатию горячей клавиши. Вашему вниманию предлагается следующий модуль:
можно записать так:
Обратите внимание, что завершающий символ «
» здесь не требуется.
С использованием модуля PrivMake запись команды получилась существенно длиннее, но
её можно поместить в меню и назначить клавиатурную комбинацию;Проиллюстрирую последний пункт, создав процедуру для компоновки Training.exe:
Таким образом, четыре щелчка по коммандерам заменяются на один:
rd.eot & (rd.Pos() <= end). Должно получиться так:
Нетрудно догадаться, что так же можно автоматизировать перекомпиляцию и выгрузку модулей, тестирование, сборку дистрибутивов и т.п.
В состав Visual C++ включен компилятор языка C, позволяющий создавать как простые консольные программы, так и классические приложения Windows, мобильные приложения и многое другое.
В этом пошаговом руководстве показано, как создать простейшую программу на языке C в стиле "Hello, World" в текстовом редакторе с последующей компиляцией из командной строки. Если вы предпочитаете работать с C++ в командной строке, см. статью Пошаговое руководство. Компиляция собственной программы на языке C++ из командной строки. Если вы хотите попробовать интегрированную среду разработки Visual Studio вместо командной строки, см. статью Пошаговое руководство. Работа с проектами и решениями (C++) или Использование интегрированной среды разработки Visual Studio для разработки приложений для настольных систем на языке C++.
Предварительные требования
Для выполнения этого пошагового руководства необходимо установить Visual Studio и дополнительные компоненты Visual C++ или Build Tools для Visual Studio.
Visual Studio — это эффективная интегрированная среда разработки, которая поддерживает полнофункциональный редактор, диспетчеры ресурсов, отладчики и компиляторы для многих языков и платформ. Сведения об этих компонентах, а также о скачивании и установке Visual Studio, включая бесплатный выпуск Visual Studio Community, см. в этой статье.
При использовании версии Build Tools для Visual Studio устанавливаются только программы командной строки, библиотеки и компиляторы, необходимые для сборки программ на C и C++. Это идеальный вариант для создания заданий и упражнений, а установка выполняется относительно быстро. Чтобы установить только набор программ командной строки, скачайте Build Tools для Visual Studio на странице скачивания Visual Studio, а затем запустите установщик. В установщике Visual Studio выберите рабочую нагрузку Средства сборки C++ и щелкните Установить.
Прежде чем можно будет выполнить сборку программы C или C++ в командной строке, необходимо убедиться в том, что эти средства установлены и к ним можно получить доступ из командной строки. Visual C++ имеет сложные требования к среде командной строки для поиска используемых средств, заголовков и библиотек. Visual C++ нельзя использовать в простом окне командной строки без предварительной подготовки. Вам понадобится окно командной строки разработчика, являющееся обычным окном командной строки, в котором заданы все необходимые переменные среды. К счастью, Visual C++ устанавливает ярлыки для запуска командной строки разработчика, для которой настроена среда для сборок из командной строки. К сожалению, имена ярлыков командной строки разработчика и места их расположения отличаются практически во всех версиях Visual C++ и в различных версиях Windows. Первая задача пошагового руководства — найти нужный ярлык.
Ярлык командной строки разработчика автоматически задает правильные пути для компилятора и средств, а также для всех необходимых заголовков и библиотек. Некоторые из этих значений различаются для каждой конфигурации сборки. Если вы не используете ни один из ярлыков, эти значения среды необходимо задать самостоятельно. Дополнительные сведения см. в статье Использование набора инструментов MSVC из командной строки. Так как настраивать среду разработки сложно, настоятельно рекомендуется использовать ярлык командной строки разработчика вместо создания собственного.
Инструкции отличаются в зависимости от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Открытие командной строки разработчика в Visual Studio 2022
Если вы установили Visual Studio 2022 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите Все приложения. Прокрутите вниз и откройте папку Visual Studio 2022 (не приложение Visual Studio 2022). Выберите элемент Командная строка разработчика для VS 2022, чтобы открыть окно командной строки.
Открытие командной строки разработчика в Visual Studio 2019
Если вы установили Visual Studio 2019 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите Все приложения. Прокрутите вниз и откройте папку Visual Studio 2019 (не приложение Visual Studio 2019). Выберите элемент Командная строка разработчика для VS 2019, чтобы открыть окно командной строки.
Открытие командной строки разработчика в Visual Studio 2017
Если вы установили Visual Studio 2017 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите Все приложения. Прокрутите вниз и откройте папку Visual Studio 2017 (не приложение Visual Studio 2017). Выберите элемент Командная строка разработчика для VS 2017, чтобы открыть окно командной строки.
Открытие командной строки разработчика в Visual Studio 2015
Если вы установили Microsoft Visual C++ Build Tools 2015 в Windows 10 или более поздней версии, откройте меню "Пуск" и выберите Все приложения. Прокрутите вниз и откройте папку Microsoft Visual C++ Build Tools. Выберите элемент Командная строка Native Tools x86 Visual C++ 2015, чтобы открыть окно командной строки.
Если вы используете другую версию Windows, найдите в меню "Пуск" или на начальной странице папку средств Visual Studio, содержащую ярлык командной строки разработчика. Можно также ввести "командная строка разработчика" в строке поиска в Windows и выбрать командную строку, которая соответствует установленной версии Visual Studio. Откройте окно командной строки с помощью ярлыка.
Затем убедитесь в том, что командная строка разработчика Visual C++ настроена правильно. В окне командной строки введите cl и убедитесь в том, что выходные данные выглядят примерно так:
В зависимости от установленной версии Visual C++ и обновлений текущий каталог или номера версий могут отличаться. Если приведенный выше результат похож на отображаемый, можно приступать к сборке программ C или C++ в командной строке.
В зависимости от версии Windows, установленной на компьютере, и конфигурации системы безопасности может потребоваться правой кнопкой мыши открыть контекстное меню для ярлыка командной строки разработчика и выбрать пункт Запуск от имени администратора, чтобы успешно выполнить сборку и запуск программы, созданной в этом пошаговом руководстве.
Создание файла исходного кода на языке C и его компиляция из командной строки
В окне командной строки разработчика введите команду cd c:\ , чтобы изменить текущий рабочий каталог на корень диска C:. Затем введите md c:\hello , чтобы создать каталог, и введите cd c:\hello , чтобы перейти к этому каталогу. В этом каталоге будут находиться исходный файл и скомпилированная программа.
В командной строке разработчика введите команду notepad hello.c . В появившемся диалоговом окне блокнота с оповещением выберите Да, чтобы создать файл hello.c в рабочей папке.
В окне блокнота введите следующие строки кода:
В строке меню блокнота выберите Файл > Сохранить, чтобы сохранить файл hello.c в рабочей папке.
Вернитесь к окну командной строки разработчика. Введите dir в командной строке, чтобы получить список содержимого каталога c:\hello . Вы увидите исходный файл hello.c в списке каталогов, который выглядит примерно так:
Даты и некоторые другие данные будут отличаться на вашем компьютере. Если вы не видите файл исходного кода hello.c , убедитесь в том, что вы открыли созданный каталог c:\hello и сохранили исходный файл в нем в блокноте. Также убедитесь, что исходный код был сохранен с расширением имени файла .c , а не .txt .
Чтобы скомпилировать программу, в командной строке разработчика введите cl hello.c .
Имя исполняемой программы (hello.exe) отображается в информации, выводимой компилятором.
Чтобы запустить программу, в командной строке введите hello .
Программа выводит следующий текст и затем закрывается:
Поздравляем! Вы скомпилировали и запустили программу на C с помощью командной строки.
Следующие шаги
Этот пример Hello, World является самой простой программой C. Реальные программы выполняют полезные действия и имеют файлы заголовков, дополнительные исходные файлы и ссылки на библиотеки.
Вы можете использовать шаги, описанные в этом пошаговом руководстве для C, для создания собственного кода, чтобы не вводить приведенный пример. Вы также можете выполнить сборку различных примеров кода на C, которые можно найти в других местах. Чтобы скомпилировать программу с дополнительными файлами исходного кода, введите их все в командной строке, например:
cl file1.c file2.c file3.c
Компилятор выдает программу с именем file1.exe. Чтобы изменить имя на program1.exe, добавьте параметр компоновщика /out:
cl file1.c file2.c file3.c /link /out:program1.exe
Чтобы автоматически перехватывать другие ошибки программирования, рекомендуется выполнить компиляцию с помощью порога предупреждений /W3 или /W4:
cl /W4 file1.c file2.c file3.c /link /out:program1.exe
Компилятор cl.exe имеет множество других параметров, которые можно применять для создания, оптимизации, отладки и анализа кода. Чтобы просмотреть краткий список, введите cl /? в командной строке разработчика. Можно также выполнять компиляцию и компоновку отдельно и применять параметры компоновщика в более сложных сценариях сборки. Дополнительные сведения о параметрах и использовании компилятора и компоновщика см. в справочнике по сборке для C/C++.
Для настройки и создания более сложных проектов в командной строке можно использовать NMAKE и файлы makefile либо MSBuild и файлы проекта. Дополнительные сведения об использовании этих средств см. в разделах Справочник по NMAKE и MSBuild.
Языки C и C++ похожи, но имеют различия. Компилятор Microsoft C/C++ (MSVC) использует простое правило для определения языка, используемого при компиляции кода. По умолчанию компилятор MSVC рассматривает все файлы с расширением .c как исходные коды на языке С, а файлы с расширением .cpp как исходные коды на языке С++. Если указан параметр компилятора /TC, компилятор будет рассматривать все файлы как исходные коды на языке С вне зависимости от расширения.
Компилятор MSVC совместим со стандартами ANSI C89 и ISO C99, но не полностью. В большинстве случаев переносимый код на языке C будет компилироваться и выполняться должным образом. Компилятор обеспечивает дополнительную поддержку изменений в ISO C11/C17. Чтобы выполнить компиляцию с поддержкой C11/C17, используйте флаг компилятора /std:c11 или /std:c17 . Для поддержки C11 и C17 требуется Windows SDK 10.0.20201.0 или более поздняя версия. Рекомендуется использовать Windows SDK 10.0.22000.0 или более позднюю версию. Последнюю версию пакета можно скачать на странице Windows SDK. Дополнительные сведения и инструкции по установке и использованию этого пакета SDK для разработки на языке C см. в статье Установка поддержки C11 и C17 в Visual Studio.
Некоторые функции библиотеки и имена функций POSIX являются нерекомендуемыми в компиляторе MSVC. Функции поддерживаются, но предпочтительные имена изменились. Дополнительные сведения см. в статьях Функции безопасности в CRT и Предупреждение компилятора (уровень 3) C4996.
Как создать exe файл в C++ Visual Studio 6.0
Начал изучение C++ Visual Studio 6.0 (dev C++ не понравилась) Создал проект, написал код.
Как создать программу в С++, чтобы его можно было запускать как исполняемый .exe файл?
Здравствуйте! Собственно вся суть сабжа содержится содержится в сабже :) допустим: //.
Как создать обычный файл exe, который могут открывать друзья.
Всем доброе утро! Вопрос о том как сделать программу, которая запускалась бы одним файлом .exe.
Как отделить BGI файл от EXE. Как можно внедрить данный модуль в рабочий файл?
Помогите. Хотелось бы избавиться от BGI файла и поместить все в рабочий файл. Как это можно.
DevAlone, расскажи-ка мне, мил-человек, как мне запустить Diablo III под Wine так, чтобы она работала так же, как под Windows 10 - не тупила, не тормозила, не глючила. А то я мучился неделю, играл в Diablo III под Linux Mint 18.1 Mate 64-bit (использовал Wine + PlayOnLinux ), но у меня так и не получилось настроить её для нормальной игры. И только ради любимой игрушки пришлось ставить второй системой винду, черти б её драли.
Мораль: не всё, что можно запустить под Wine , будет работать так же хорошо, как в нативной среде.
Самой очевидной причиной является отсутствие Visual Studio 2010 или какой-то другой графической IDE-среды.
Работа может выполняться в университете, где использование инструментов для генерации кода и IDE-сред обычно запрещено.
Планируется применение автоматизированных средств разработки, таких как msbuild.exe, которые требуют знать опции командной строки для используемых инструментов.
Указание целевых входных и выходных параметров
Первым делом важно разобраться с тем, как указывать имя и тип создаваемой сборки (т.е., например, консольное приложение по имени MyShell.exe, библиотека кода по имени MathLib.dll или приложение Windows Presentation Foundation по имени Halo8.ехе). Каждый из возможных вариантов имеет соответствующий флаг, который нужно передать компилятору csc.ехе в виде параметра командной строки.
Обратите внимание, что параметры, передаваемые компилятору командной строки (а также большинству других утилит командной строки), могут сопровождаться префиксом в виде символа дефиса (-) или слеша (/).
Параметр | Описание |
---|---|
/out | Этот параметр применяется для указания имени создаваемой сборки. По умолчанию сборке присваивается то же имя, что у входного файла *.сs |
/target:exe | Этот параметр позволяет создавать исполняемое консольное приложение. Сборка такого типа генерируется по умолчанию, потому при создании подобного приложения данный параметр можно опускать |
/target:library | Этот параметр позволяет создавать однофайловую сборку *.dll |
/target:module | Этот параметр позволяет создавать модуль. Модули являются элементами многофайловых сборок |
/target:winexe | Хотя приложения с графическим пользовательским интерфейсом можно создавать с применением параметра /target: ехе, параметр /target: winexe позволяет предотвратить открытие окна консоли под остальными окнами |
Чтобы скомпилировать TestApplication.cs в консольное приложение TestApplication.exe, перейдите в каталог, в котором был сохранен файл исходного кода (с помощью флага cd) и введите следующую команду:
Теперь можно попробовать запустить приложение TestApplication.ехе из командной строки, введя имя его исполняемого файла:
Добавление ссылок на внешние сборки
Далее в командной строке нужно проинформировать компилятор csc.exe о том, в какой сборке содержатся используемые пространства имен. Поскольку применялся класс MessageBox из пространства имен System.Windows.Forms, значит, нужно указать компилятору на сборку System.Windows.Forms.dll, что делается с помощью флага /reference (или его сокращенной версии /r):
Кстати, как поступить, когда необходимо указать csc.exe несколько внешних сборок? Для этого нужно просто перечислить все сборки через точку с запятой. В рассматриваемом примере ссылаться на несколько сборок не требуется, но ниже приведена команда, которая иллюстрирует перечисление множества сборок:
csc /r:System.Windows.Forms.dll;System.Drawing.dll *.cs
Компиляция нескольких файлов исходного кода
Изменим исходный класс TestApplication так, чтобы в нем использовался класс этого нового типа:
Вывод, получаемый после запуска этой программы, идентичен предыдущей программе. Единственное отличие между этими двумя приложениями связано с разнесением логики по нескольким файлам.
В случае необходимости допускается также указывать и несколько ответных *.rsp файлов в качестве входных параметров (например, csc @FirstFile.rsp @SecondFile.rsp @ThirdFile.rsp). При таком подходе, однако, следует иметь в виду, что компилятор обрабатывает параметры команд по мере их поступления. Следовательно, аргументы командной строки, содержащиеся в поступающем позже файле *.rsp, могут переопределять параметры из предыдущего ответного файла.
Стоит отметить, что в случае добавления с помощью опции /r ссылок на сборки, которые на самом деле не используются, компилятор их проигнорирует. Поэтому беспокоиться по поводу "разбухания кода" не нужно.
Читайте также: