Каково различие между разрабатыванием Разработчика C++ проект от IDE и командной строкой?

У меня есть другое поведение компилятора, когда строительный проект от IDE и от командной строки, которую я не могу объяснить.

Описание подробной проблемы является довольно большим, но это действительно просто.

У меня есть Разработчик C++ проект, который имеет включенный (IncludeUnits.pas) файла ПЕРВЕНСТВА. Этот файл первенства имеет несколько единиц и перечисленных inc-файлов. Эти файлы расположены в отдельных папках, и эти папки перечислены в путях library&include в опциях проекта.

Расположение папок:

C:\Demo\Bin
C:\Demo\Project
C:\Demo\Project\CBuilder5
C:\Demo\Project\Common
C:\Demo\Source
C:\Demo\Source\Common

Мусорное ведро является выходной папкой, Project/CBuilder5 содержит проект (bpr-файл), хранения Проекта/Распространенные включали файл первенства (IncludeUnits.pas), Источник и Источник / Общее хранение другие файлы (pas&inc). Я думаю, что это - довольно обычное расположение.

C:\Demo\Project\Common\ IncludeUnits.pas:

unit IncludeUnits;

interface

uses
  Test;

implementation

end.

C:\Demo\Source\ Test.pas:

unit Test;

interface

{$I Test.inc}

implementation

end.

C:\Demo\Source\Common\ Test.inc:

// this file is empty

Если я скомпилирую этот проект от Разработчика C++ IDE то - он скомпилирует прекрасный. Разработчик C++ IDE не имеет никаких дополнительных путей в настройках IDE, установил.

Теперь, я хочу скомпилировать его от командной строки. Во-первых, я выхожу

bpr2mak.exe MyProject.bpr

команда.

Эта команда создает файл MyProject.mak, где я вижу все пути ("....\Source", и "....\Source\Common" рассматриваемые пути):

...
INCLUDEPATH = $ (BCB) \include; $ (BCB) \include\vcl;..\Common;..\..\Source;..\..\Source\Common
LIBPATH = $ (BCB) \lib\obj; $ (BCB) \lib;..\Common;..\..\Source;..\..\Source\Common
...

Теперь, я работаю, делают команду:

make.exe-B-f "MyProject.mak"

Это дает мне следующий вывод:

C:\PROGRA~1\Borland\CBUILD~2\BIN\dcc32-N2....\Bin-N0....\Bin - $Y + - $W - $R-v-JPHNE-M-UC:\PROGRA~1\Borland\CBUILD~2\bin..\include; C:\PROGRA~1\Borland\CBUILD~2\bin..\include\vcl;..\Common;..\..\Source;..\..\Source\Common-D_DEBUG; _RTLDLL; NO_STRICT-OC:\PROGRA~1\Borland\CBUILD~2\bin..\include; C:\PROGRA~1\Borland\CBUILD~2\bin..\include\vcl;..\Common;..\..\Source;..\..\Source\Common - BCB..\Common\IncludeUnits. ПЕРВЕНСТВО
Borland Delphi Version 13.0 Copyright (c) 1983,99 Inprise Corporation
C:\Demo\Project\Common\IncludeUnits.pas(1) C:\Demo\Project\Common\IncludeUnits.pas(1) C:\Demo\Project\Common\IncludeUnits.pas(1) C:\Demo\Project\Common\IncludeUnits.pas(6) C:\Demo\Source\Test.pas(1) C:\Demo\Source\Test.pas(5) Фатальный: Файл, не найденный: 'Test.inc'

Как Вы видите - весь путь поиска передается компилятору, и файл (Test.inc) является всем здесь - в той папке Source\Common. Но все еще компилятор не может найти его?

Конечно, я выполняю обе команды от папки с bpr-файлом. И изменение путей к абсолюту не помогает.

Копирование Test.inc от Source\Common до Источника поможет. При изменении {$I Test.inc} к {$I Common\Test.inc} также поможет.

Почему? Кажется, что я пропускаю что-то.Помните: проект не имеет никаких проблем с компиляцией от IDE, Test.inc найден, не копируя или изменяя объявление. Я пропускал некоторый переключатель для создания или dcc32?

1
задан Alex 10 August 2010 в 11:43
поделиться

1 ответ

Я нашел причину: в командной строке для dcc32 отсутствует переключатель -I, который указывает пути для включаемых файлов.

По какой-то причине bpr2mak не поддерживает эту опцию. К счастью, он позволяет указать альтернативный шаблон для преобразования bpr -> mak. Я отредактировал шаблон по умолчанию и добавил к нему параметр «-I», передал новый шаблон в bpr2mak - и он сработал.

2
ответ дан 2 September 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: