KnigaRead.com/

Д. Стефенс - C++. Сборник рецептов

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Д. Стефенс, "C++. Сборник рецептов" бесплатно, без регистрации.
Перейти на страницу:

Рецепт 1.14.

1.2. Сборка простого приложения «Hello, World» из командной строки

Проблема

Вы хотите собрать простую программу «Hello, World», подобную приведенной в примере 1.4.

Пример 1.4. Простая программа «Hello, World»


hello.cpp

#include <iostream>


int main() {

 std.:cout << "Hello, World!n";

}

Решение

Выполните следующие шаги.

1. Установите все переменные среды окружения, необходимые для вашего инструментария.

2. Введите команду, которая говорит компилятору скомпилировать и скомпоновать вашу программу.

Сценарии для установки переменных среды окружения перечислены в табл 1.5. Эти сценарии расположены в той же директории, что и инструменты командной строки (табл. 1.3), Если ваш инструментарий в табл. 1.5 не указан, пропустите первый шаг. В противном случае, если вы используете Windows, запустите соответствующий сценарий из командной строки, а если используете Unix, то укажите его в качестве источника переменных окружения.


Табл. 1.5. Сценарии для установки переменных среды окружения, необходимые для инструментов командной строки

Инструментарий Сценарий Visual C++ vcvars32.bat Intel (Windows) iclvars.bat¹ Intel (Linux) iccvars.sh или iccvars.csh Metrowerks (Mac OS X) iccvars.sh или mwvars.csh² Metrowerks (Windows) cwenv.bat Comeau Тот же, что и для используемого базового инструментария

¹ В предыдущих версиях компилятора Intel этот сценарий назывался iccvars.bat.

² В версиях CodeWarrior до 10.0 имелся единственный сценарий csh с именем mwvars.


Команды для компиляции и компоновки hello.cpp приведены в табл. 1.6. Для корректной работы эти команды требуют, чтобы ваша текущая директория была директорией, содержащей hello.cpp, и чтобы директория, в которой находится компилятор командной строки, была указана в переменной среды PATH. Если на шаге 1 вы запустили сценарий, то последнее требование будет удовлетворено автоматически. Также возможно, что директорию, содержащую инструменты командной строки, в переменную PATH добавил инсталлятор при установке инструментария. В противном случае вы можете либо добавить эту директорию в переменную PATH, как показано в табл. 1.7, либо указать в командной строке полный путь к файлу.


Табл. 1.6. Команды для компиляции и компоновки hello.cpp за один шаг

Инструментарий Командная строка GCC g++ -o hello hello.cpp Visual C++ cl -nologo -EHsc -GR -Zc:forScope -Zc:wchar_t -Fehello hello.cpp Intel (Windows) id -nologo -EHsc -GR -Zc:forScope -Zc:wchar_t -Fehello hello.cpp Intel (Linux) icpc -o hello hello.cpp Metrowerks mwcc -wchar_t on -cwd include -o hello hello.cpp Comeau como -o hello hello.cpp Borland bcc32 -q -ehello hello.cpp Digital Mars dmc -Ae -Ar -l<dmcroot>/stlport/stlport -o hello hello.cpp

Табл. 1.7. Добавление директории в переменную среды окружения PATH для одной сессии работы с командной строкой

Оболочка Командная строка bash, sh, ksh (Unix) export PATH=<directory>:$PATH csh, tsch (Unix) setenv PATH <directory>:$PATH cmd.exe (Windows) set PATH=<direcfory>;%PATH%

Например, при использовании Microsoft Visual Studio .NET 2003 и установке ее по стандартному пути на диск С перейдите в директорию, содержащую hello.cpp, и введите показанные ниже команды.

> "C:Program FilesMicrosoft Visual Studio .NET 2003Vc7binvcvars32.bat"

Setting environment for using Microsoft Visual Studio .NET 2003 tools.

(If you have another version of Visual Studio or Visual C++ installed

and wish to use its tools from the command line, run vcvars32.bat for

that version.)

> cl -nologo -EHsn -GR -Zc:forScope -Zc:wchar_t -Fehello hello.cpp hello

hello.cpp

hello

Теперь программу можно запустить.

> hello

Hello World!

Аналогично при использовании Intel 9.0 для Linux и установке его по стандартному пути /opt/intel/cc/9.0 откройте оболочку bash, перейдите в директорию, содержащую hello.cpp, и введите команды:

$ . /opt/intel/cc/9.0/bin/iccvars.sh

$ icpc -о hello hello.cpp

$ ./hello

Hello, World!

Обсуждение

Переменные среды окружения — это пары строк, поддерживаемые системой и доступные для работающих приложений. Инструменты командной строки часто используют переменные среды, для того чтобы узнать некоторые подробности о вашей системе и для получения настроечной информации, которую в противном случае пришлось бы вводить в командной строке. Переменная среды, с которой вы чаще всего будете сталкиваться, — это PATH, которая хранит перечень директорий, в которых операционная система ищет имя исполняемого файла, введенного в командной строке в виде простого имени без указания полного пути к нему. В Windows в директориях из переменной PATH также ищутся динамические библиотеки при их загрузке.

Инструменты командной строки используют переменные среды как в Unix, так и в Windows, но в Unix обычно есть системный компилятор С++, и переменные среды для его работы обычно по умолчанию устанавливаются в правильные значения. Однако в Windows традиционно имелось несколько конкурирующих компиляторов С++. Например, два различных компилятора будут, скорее всего, искать стандартные заголовочные файлы и библиотеки в различных местах. Следовательно, для Windows инструментарий часто предоставляет сценарии, которые устанавливают несколько переменных среды, в которых записано расположение заголовочных файлов и библиотек, а также другая информация.

Один из способов использовать такой сценарий — запускать его из командной строки перед вызовом какого-либо инструмента командной строки, как я продемонстрировал для Visual C++ и для Intel 9.0 для Linux. Также можно сделать установки переменных среды постоянными, с тем чтобы не приходилось каждый раз при запуске сессии командной строки запускать этот сценарий. Как это сделать, зависит от вашей операционной системы и вашей оболочки. Однако изменение постоянных значений переменных среды является плохой идеей, так как некоторые наборы инструментов могут содержать инструменты с одинаковыми именами, что приведет к вызову в процессе сборки неправильного инструмента. Например, если у вас установлено несколько версий Visual С++, вы должны быть уверены, что перед использованием инструментов командной строки вы запустили правильную версию vcvars32.bat. Другим примером является то, что Visual C++ и Digital Mars содержат инструменты с именами link.exe и lib.exe.

Теперь давайте посмотрим на командные строки в табл. 1.7. Помните, что вам требуется обратить внимание только на ту строку, которая соответствует вашему инструментарию. В общем случае информация, передаваемая компилятору, делится на четыре категории.

• Имя (имена) входного (исходного) файла (файлов).

• Имя (имена) выходного файла (файлов).

• Пути поиска файлов.

• Общая конфигурационная информация.

В табл. 1.6 указан только один входной файл hello.cpp, и он передается компилятору с помощью указания его имени в командной строке. Не имеет значения, в каком месте строки находится имя входного файла, при условии, что оно не находится в середине другой опции командной строки. В табл. 1.7 я поместил hello.cpp в самый конец командной строки.

Также в ней присутствует один выходной файл — hello.exe или hello, в зависимости от операционной системы. Однако в этом случае способ передачи имени файла компилятору зависит от инструментария. Большая часть инструментов для указания выходного файла использует -о <file>, но Visual C++ и Intel для Windows используют -Fe<file>, a Borland использует -e<file>. Заметьте, что указывать расширение исполняемого файла не обязательно.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*