• Общая конфигурационная информация.
В табл. 1.6 указан только один входной файл hello.cpp , и он передается компилятору с помощью указания его имени в командной строке. Не имеет значения, в каком месте строки находится имя входного файла, при условии, что оно не находится в середине другой опции командной строки. В табл. 1.7 я поместил hello.cpp в самый конец командной строки.
Также в ней присутствует один выходной файл — hello.exe или hello , в зависимости от операционной системы. Однако в этом случае способ передачи имени файла компилятору зависит от инструментария. Большая часть инструментов для указания выходного файла использует -о , но Visual C++ и Intel для Windows используют -Fe , a Borland использует -e . Заметьте, что указывать расширение исполняемого файла не обязательно.
Единственная информация в табл. 1.7, относящаяся к третьей категории — путям поиска файлов, — имеется в строке для Digital Mars. Так как библиотека STLPort не является встроенной стандартной библиотекой Digital Mars, компилятору с помощью опции -I требуется сообщить, где искать заголовочные файлы STLPort. Заголовочные файлы STLPort расположены в поддиректории /stlport/stlport установки Digital Mars. В табл. 1.7 я указал эту директорию с помощью опции /stlport/stlport . За дополнительной информацией об опции -I обратитесь к рецепту 1.5.
Большая часть опций командной строки в табл. 1.7 относится к четвертой категории: общей конфигурационной информации. Эти опции не относятся к какому-либо отдельному файлу, а включают или отключают определенные функции компилятора.
• Опции -nologo (Visual C++ и Intel для Windows) и -q (Borland) говорят компилятору не печатать в консоли свои название и версию. Это делает вывод компилятора более простым для чтения.
• Опции -EHsc (Visual C++ и Intel для Windows) и -Ае (Digital Mars) говорят компилятору включить обработку исключений С++.
• Опции -GR (Visual C++ и Intel для Windows) и - Ar (Digital Mars) говорят компилятору включить информацию времени исполнения (RTTI).
• Опции -Zc:wchar_t (Visual C++ и Intel для Windows) и -wchar_t (Metrowerks) говорят компилятору распознавать wchar_t
как встроенный тип.
• Опция -Zc:forScope (Visual C++ и Intel для Windows) говорит компилятору задействовать современные правила для областей видимости циклов for
.
• Опция - cwd include (Metrowerks) говорит компилятору начинать поиск включенного заголовка с директории исходного файла, содержащего директиву include
. Это поведение по умолчанию для всех инструментов, кроме Metrowerks.
Далее давайте рассмотрим второе решение нашей проблемы. Вместо того чтобы компилировать и компоновать с помощью одной команды, второй шаг можно разбить на две части.
2a. Введите команду, говорящую компилятору скомпилировать программу в объектный файл без компоновки.
2b. Введите команду, говорящую компоновщику создать исполняемый файл из объектных файлов, созданных на шаге 2a.
В нашем простом случае нет причин для раздельной компиляции и компоновки. Однако раздельная компиляция и компоновка требуются достаточно часто, так что важно, чтобы вы знали, как это делается. Например, при создании статической библиотеки вы должны скомпилировать файлы без компоновки, а затем передать готовые объектные файлы в архиватор.
Команды для компиляции и компоновки в два этапа представлены в табл. 1.8 и 1.9. В некоторых случаях я устанавливаю для объектного файла расширение o[bj] , указывающее, что одна и та же командная строка годится и для Windows, и для Unix, за исключением расширения объектного файла.
Табл. 1.8. Команды для компиляции hello.cpp без компоновки
Инструментарий |
Командная строка |
GCC |
g++ --c -o hello.o hello.cpp |
Visual C++ |
cl -с -nologo -EHsc -GR -Zc:forScope -Zc:wchar_t -Fohello hello.cpp |
Intel (Windows) |
icl -с -nologo -EHsc -GR -Zc:forScope Zc:wchar_t -Fohello hello.cpp |
Intel (Linux) |
icpc -с о hello.о hello.cpp |
Metrowerks |
mwcc -c -wchar_t on -cwd include -o hello.o[bj] hello.cpp |
Comeau |
como -с -o hello.o[bj] hello.cpp |
Borland |
bcc32 -c -q -o hello.obj hello.cpp |
Digital Mars |
dmc -c -Ae -Ar -l/stlport/stlport -o hello.obj hello.cpp |
Табл. 1.9. Команды для компоновки hello.exe или hello
Инструментарий |
Командная строка |
GCC |
g++ -о hello hello.o |
Visual C++ |
link -nologo -out:hello.exe hello.obj |
Intel (Windows) |
xilink -nologo -out:hello.exe hello.obj |
Intel (Linux) |
icpc -o hello hello.o |
Metrowerks |
mwld -o hello hello.o[bj] |
Comeau |
como --no_prelink_verbose -о hello hello.o[bj] |
Borland |
bcc32 -q -ehello hello.cpp |
Digital Mars |
link -noi hello.obj, hello.exe,NUL,user32.lib kernel32.lib |
Например, чтобы собрать исполняемый файл hello с помощью инструментария GCC, перейдите в директорию, содержащую hello.cpp , и введите следующие команды.
Читать дальше