Jump to content

    
Sign in to follow this  
vadon

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

Recommended Posts

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

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

 

Share this post


Link to post
Share on other sites
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>

 

Share this post


Link to post
Share on other sites
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 папок, замахаться можно (

Share this post


Link to post
Share on other sites
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")

 

Share this post


Link to post
Share on other sites

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

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

Как тестировал, создал такую структуру, папка 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

Share this post


Link to post
Share on other sites
3 hours ago, vadon said:

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

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

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

 

Share this post


Link to post
Share on other sites
12 minutes ago, AlexandrY said:

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
09.02.2021 в 21:27, vadon сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this