Перейти к содержанию
    

Одинаковые имена файлов .c

Есть проект с большим кол-вом файлов. Они структурированы по папкам и по группам в IAR.

По стечению обстоятельств 2 файла именуются одинаково. При компиляции ошибка:

Build error: Multiple tools write to the same file. 
  File: X:\svn_checkout\switchbox\mcu\projects\IAR\mainapp\Debug\Obj\timer.o 
  Tool 1: C/C++ Compiler, when processing X:\svn_checkout\switchbox\mcu\libs\contikiOS\core\sys\timer.c 
  Tool 2: C/C++ Compiler, when processing X:\svn_checkout\switchbox\mcu\libs\libopencm3\lib\stm32\f4\timer.c

 

Видно, что оба файла - из либ, подключаются через svn с репы и переименовывать их не получится.

Как обойти такой странный прикол? Почему бы компилятору не кидать объектники по разным папкам в соответствии со структурой сорцов?

 

Предвосхищая совет по multi-file compilation. Эта штука вообще странная. После ее включения эта ошибка действительно пропала, но появились странности:

Странность раз.

void blocking_handler(void);
__weak void nvic_wwdg_isr(void);
#pragma weak nvic_wwdg_isr = blocking_handler

ведет к

Error[Pe1152]: declaration aliased to undefined entity "blocking_handler"

хотя до включения этой опции все было ок. К тому же, странно то, что таких алиасов около 100 (для всех прерываний, разные только имена), а ошибки только на первой половине из них

 

Странность два.

Error[Pe1061]: declaration of function "protocolInit" is incompatible with a declaration in another translation unit

"__interwork __softfp int protocolInit()" (declared at line 62 of main.c")

"__interwork __softfp void protocolInit(void)" (declared at line 65 protocol.c")

на том, что раньше было просто declared implicity.

Изменено пользователем drozel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если запускать компилятор вручную (из make) - можно указать имя свое объектника для каждого файла. К примеру, формировать его на основе пути.

 

Как сделать это из ИДЕ - не знаю :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кому-нибудь удалось решить вопрос компиляции файлов с одинаковыми названиями через IDE?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кому-нибудь удалось решить вопрос компиляции файлов с одинаковыми названиями через IDE?

Очень коряво, но проблему с обновлением исходных файлов со стороны решает.

В случае из топа удаляем из проекта "X:\svn_checkout\switchbox\mcu\libs\libopencm3\lib\stm32\f4\timer.c"

и добавляем вместо него файл "X:\svn_checkout\switchbox\mcu\libs\libopencm3\lib\stm32\f4\emu_timer.c" из одной строки: "#include timer.cpp"

При изменении исхоодников достаточно лишь перекомпилировать проект.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему нельзя просто файл переименовать ?

В таком случае нужно вручную отслеживать изменение переименованного файла в репозитарии и каждый раз

при изменении производить обновление переименованного файла.

А первоначальная задача - перекомпилировать без дополнительных телодвижений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть и IAR еще интересная, почти недокументированая

#pragma module_name = "name"

 

По моему разумению, объектник должен выходить с этим именем.

Но IAR считает, видимо, иначе. На что она в итоге влияет, я понять не смог.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...