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

IAR 8.40.2 Добавление файлов

Доброго времени суток.

Есть некий код библиотеки, который состоит из 100500 папок и файлов с большим вложением. Как это все дело затянуть в проект IAR ? 
Ручками строить всю эту структуру файлов и папок напряжно.

 

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


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

28 минут назад, vadon сказал:

Есть некий код библиотеки, который состоит из 100500 папок и файлов с большим вложением. Как это все дело затянуть в проект IAR ? 
Ручками строить всю эту структуру файлов и папок напряжно.

А вы программку простенькую напишите, чтобы в ewp-файл проекта после MAIN.C дописала ваши файлы.

Например, так:
 

    <file>
        <name>$PROJ_DIR$\MAIN.C</name>
    </file>

    <file>
        <name>$PROJ_DIR$\module1.c</name>
    </file>

    <file>
        <name>$PROJ_DIR$\module2.c</name>
    </file>

...

    <file>
        <name>$PROJ_DIR$\module1000.c</name>
    </file>

 

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


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

2 hours ago, Xenia said:

А вы программку простенькую напишите, чтобы в ewp-файл проекта после MAIN.C дописала ваши файлы.

Например, так:
 


    <file>
        <name>$PROJ_DIR$\MAIN.C</name>
    </file>

    <file>
        <name>$PROJ_DIR$\module1.c</name>
    </file>

    <file>
        <name>$PROJ_DIR$\module2.c</name>
    </file>

...

    <file>
        <name>$PROJ_DIR$\module1000.c</name>
    </file>

 

На до не просто дописать, а всю иерархию папок и файлов построить, получается надо написать свою программу которой которая будет ewp файлы генерировать? и почему ее нет dнутри IAR? 

LWIP и OC осилил, но есть либа в которой более 400 файлов, с глубиной вложения 4-5 папок, замахаться можно (

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


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

3 hours ago, vadon said:

LWIP и OC осилил, но есть либа в которой более 400 файлов, с глубиной вложения 4-5 папок, замахаться можно (

Ловите скрипт на питоне.
Добавляет в уже существующий проект IAR-а .ewp  все сорсы из поддиректорий. 

import os
import string
import xml.etree.ElementTree as ET

prog_file_name = "Project.ewp"
proj_dir = os.getcwd() # Файл должен находится в корневой директории проекта


def Populate_groups(root_path, el):
  n = 0

  # Создаем группу
  grp = ET.SubElement(el, 'group')
  nm = ET.SubElement(grp, 'name')
  nm.text = os.path.basename(root_path)

  it = os.scandir(root_path)
  for entry in it:
    if not entry.name.startswith('.') and entry.is_dir():
      deeper_path = os.path.join(root_path,entry.name)
      print ('Group: ' + deeper_path)
      n = n + Populate_groups(deeper_path, grp)

  it = os.scandir(root_path)
  for entry in it:
    if not entry.name.startswith('.') and entry.is_file():
      fname = os.path.join(root_path,entry.name)
      if fname.endswith('.c') or fname.endswith('.cpp') or fname.endswith('.s') or fname.endswith('.S') :
        p = fname.replace(proj_dir,"$PROJ_DIR$")
        fl = ET.SubElement(grp, 'file')
        nm = ET.SubElement(fl,  'name')
        nm.text = p
        n = n + 1  
        print ('File:  ' + p)


  if n==0:
    el.remove(grp)
  #print (n)       
  return n



full_proj_name = proj_dir + "\\" + prog_file_name

# Открываем файл проекта

# Можно открыть так file = open("D:\embedded\Project.ewp",'r')
tree = ET.parse(full_proj_name)
root = tree.getroot()
confs = root.findall('configuration')
for conf  in confs:
  for sett in conf.iter('settings'):
    name = sett.find('name')

    if name.text == 'ICCARM':
      set_data = sett.find('data')
      #print (name.text)
      #ET.dump(set_data)
      break

  # Преобразуем список подключаемых путей так чтобы в него попали все поддиректории корня проекта

  # Ищем тэг с перечислением подключаемых путей
  data_option_include = None
  for option in set_data.iter('option'):
    opt_name = option.find('name')
    #ET.dump(opt_name)
    if opt_name.text == 'CCIncludePath2':
      #ET.dump(option)
      data_option_include = option
      break

  if data_option_include is not None:
    #for include in data_option_include.iter('state'):
    #print (include.text)
    set_data.remove(data_option_include)

  # Восстанавливаем тэг option с перечислением путей
  new_opt = ET.SubElement(set_data, 'option')
  new_name = ET.SubElement(new_opt, 'name')
  new_name.text = 'CCIncludePath2'



  # Проходим по всем директориям проекта и включаем их в список
  # Если включать только директории содержащие .h файлы то при компиляции проекта IAR IDE не находит некоторых директорй после такого преобразования
  for dirpath, dirs, files in os.walk(proj_dir):
    p = dirpath.replace(proj_dir, "$PROJ_DIR$")
    new_incl = ET.SubElement(new_opt, 'state')
    new_incl.text = p
    print('Include: ' + p)

# Удаляем список файлов и формируем новый с распределением по группам аналогичным распределению по директориям

groups = root.findall('group')
for group  in groups:
  #ET.dump(group)
  root.remove(group)
  
  
Populate_groups(proj_dir , root)  
  
    

print ("END!")
tree.write(full_proj_name, xml_declaration=True, encoding="UTF-8")

 

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


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

О это уже близко, не силен в питоне, но попытаюсь разобраться.

Но что то не работает скрипт

Как тестировал, создал такую структуру, папка IAR c проектом в ней такая структура

P1
   INCLUDE
      test_p1.h
   test.p1.c
P2
   INCLUDE
     test_p2.h
   test_p2.c
main.c 

запустил скрипт, предварительно вписав имя проекта в 

prog_file_name = "test_p.ewp"

скрипт выдал какието ошибки ((((
 

script.jpg

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


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

3 hours ago, vadon said:

Но что то не работает скрипт

скрипт выдал какието ошибки ((((

У меня использован был питон версии 3.7.1  в варианте 64-е бита
У  вас похоже что-то не так с импортируемым модулем "os"
В питоне с версиями нужно быть аккуратным.  

 

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


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

12 minutes ago, AlexandrY said:

У меня использован был питон версии 3.7.1  в варианте 64-е бита
У  вас похоже что-то не так с импортируемым модулем "os"
В питоне с версиями нужно быть аккуратным.  

 

3.7.1  у меня не ставится на win7 (

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


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

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

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


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

09.02.2021 в 21:27, vadon сказал:

есть либа в которой более 400 файлов, с глубиной вложения 4-5 папок, замахаться можно (

Неужели там так много папок? Долго там только в ручную папки делать в проекте, т.к. ИАР не предлагает брать папки с дерева каталогов, только вводить вручную. Ну а файлы добавлять двумя кликами: выбрал фильтр на *.c *.cpp и все файлы в папке добавил. Все хидеры ИАР сам цепляет. Думаю, за это время уже бы все добавили :))

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


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

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

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

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

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

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

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

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

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

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