Я использую IAR Embedded workbench 5.51 для MSP430. Я использую C99.
Я пытаюсь включить код из сторонней библиотеки. Я скопировал структуру каталогов этой сторонней библиотеки точно в подкаталог в моем основном каталоге проекта. Однако, когда я пытаюсь скомпилировать, я получаю кучу
Неустранимая ошибка [Pe1696]: невозможно открыть исходный файл "ThirdPartyLib / Subdir / file.h"
Однако в журнале IAR показывает:
искал: "C: \ ... бла бла бла ... \ Source \ ThirdPartyLib \ Subdir \"
Операторы include в каждом из исходных файлов в этой библиотеке похожи на:
#include "ThirdPartyLib/Subdir/someheader.h"
Я попытался добавить путь к препроцессору C, перейдя по ссылке:
Проект -> Параметры -> Компилятор C / C ++ -> Препроцессор
и добавляем строки:
$PROJ_DIR$\ThirdPartyLib\
$PROJ_DIR$\ThirdPartyLib\Subdir\
$PROJ_DIR$\ThirdPartyLib\Utils\
У меня не проверено "Многофайловая компиляция".
Все исходные файлы, о которых идет речь, были добавлены в проект. Я создал группы, чтобы имитировать структуру каталогов библиотеки.
Проблема исчезнет, если я изменю пути с абсолютных на относительные пути, такие как
#include "somelocalheader.h"
#include "../Utils/someotherheader.h"
Но я имею дело с большим количеством файлов и хочу как можно меньше изменять их.
У меня никогда раньше не было проблем с этим - кто-нибудь знает, почему это могло произойти. Есть ли простое решение для этого, чтобы мне не приходилось очищать каждый оператор include в каждом файле c?
Вот как выглядит мое дерево каталогов:
- Source
- Debug
- Exe
- Output.d43
- List
- blabla.map
- Obj
- ...
- Exe
- Release
- ...
- settings
- ...
- ThirdPartyLib
- Subdir
- ... Third Party Code Files Live Here ...
- Utils
- ... More Third Party Code Files Live Here ...
- Subdir
- ... Мой код живет здесь вместе с EWP, EWW и т. Д.
- Debug
РЕДАКТИРОВАТЬ №2: я переместил каталог ThirdPartyLib на более высокий уровень, потому что я рекурсивно запускаю doxygen на / Source / и понял, что doxygen принимает НАВСЕГДА, и, кроме того, у библиотеки есть собственный API.
Во всяком случае, вот как выглядит структура сейчас:
- Working Copy
- Source
- Debug
- Exe
- Output.d43
- List
- blabla.map
- Obj
- ...
- Exe
- Release
- ...
- settings
- ...
- ... Мой код живет здесь вместе с EWP, EWW и т. Д.
- Debug
- ThirdPartyLib
- Subdir
- ... Third Party Code Files Live Here ...
- Utils
- ... More Third Party Code Files Live Here ...
- Subdir
- Source
Я снова добавил в свой проект группу для ThirdPartyLib с двумя подгруппами SubDir и Utils и добавил все файлы из каталогов Subdir и Utils в соответствующие подгруппы.
Теперь я снова попытался скомпилировать это и снова столкнулся с ошибкой Pe1696. IAR говорит:
searched: "C:\...\Working Copy\ThirdPartyLib\SubDir"
Тем не менее, он все еще не находит файлы.
Я сослался на этот пост: http://e2e.ti.com/support/low_power_rf/f/155/t/110195.aspx Я не уверен, что это полностью актуально, потому что каталоги, которые я включаю, похоже, не «выпали». IAR явно ищет файлы.
Но я все равно попытался добавить в препроцессор следующие строки
$PROJ_DIR$\..\ThirdPartyLib\SubDir
$PROJ_DIR$\..\ThirdPartyLib\utils
Кажется, это не помогает. Я получаю эти дополнительные строки в журнале сообщений:
searched: "C:\...\Working Copy\Source\..\ThirdPartyLib\SubDir\"
searched: "C:\...\Working Copy\Source\..\ThirdPartyLib\Utils\"
Редактировать №3. Я попытался переместить EWW / EWP на уровень выше до «Рабочей копии», а затем прочитал все группы и все файлы ... без костей. Я потерялся здесь. Больше всего расстраивает то, что та же библиотека реализована в другом проекте, который был выполнен некоторыми бывшими разработчиками, и я пытаюсь включить ее таким же образом. Я знаю, что это будет что-то тривиальное, просто не знаю что.
lib/
, препроцессор будет ожидать, по крайней мере, найти каталогlib
в вашем пути включения. - person Austin Phillips   schedule 09.07.2013Working Copy
быть в пути включения, а не...\ThirdPartyLib
, поскольку все ссылки внутри библиотеки относятся кThirdPartyLib/xxx
? Компилятор будет эффективно объединять каждую командную строку, включая путь и путь#include
при поиске. - person Austin Phillips   schedule 10.07.2013