Різні версії WinAVR поруч

Коли виходять нові версії компіляторів, у більшості випадків варто спершу спробувати нову версію в роботі, не відмовляючись остаточно від старої. Лише після перевірки перейти на нову версію, можливо навіть попроектно. Бажано залишити можливість повернення до попередньої.
Для цього необхідно встановити поруч кілька версій:

avr-gcc folders

Але ж треба якось вказати своїй системі програмування, яку саме версію використовувати. Звісно, при необхідності замінити версію витирати з кореня диску каталог C:\WinAVR та копіювати у нього один з каталогів компіляторів це «дещо незручно».

Для керування процесом збирання проектів я користуюся утилітою make (у різних варіантах, вже досить давно лише GNU make), тому вибір версії компілятора, конкретної чи поточної «за умовчанням», роблю для кожного проекту незалежно через налаштування Makefile проекту.

Та це не завжди можливо. Наприклад, робоче середовище може бути розраховане на розміщення компілятора в конкретному каталозі або шукати його в каталогах, вказаних в змінній оточення PATH.
В другому випадку часто можна обійтися bat-файлами, які підставляють на початок PATH каталоги потрібної версії компілятора і викликають AVRStudio:

PATH c:\avr-gcc\WinAVR\20100110\bin;c:\avr-gcc\WinAVR\20100110\utils\bin;%PATH%
"C:\Program Files\Atmel\AVR Tools\AvrStudio4\AVRStudio.exe"

Для зміни версії треба вийти з AVRStudio та запустити інший командний файл.

З моєї точки зору набагато зручнішим є інший шлях, звичний для користувачів Linux, але мало відомий серед користувачів Windows незважаючи на те, що з часів Windows 2000 файлова система NTFS надає необхідні можливості. А саме, створювати «точки з’єднання», тобто лінки файлової системи на каталоги. Не плутайте їх з .lnk-файлами, тобто «ярликами» у Windows. Перші є частиною файлової системи NTFS, другі специфічні для Windows і можуть існувати і на файловій системі FAT. Для нас важливо те, що junction point для звичайної програми не відрізняється від каталогу, але при цьому вказує на інший каталог, який може знаходитися на іншому дискові даного комп’ютера. Також важливо те, що замінити точку з’єднання можна не виходячи з редактора/IDE, що дає майже таку саму гнучкість, як і заміна інструмента на рівні Makefile.

Створити чи видалити таку точку з’єднання можна за допомогою програми junction.exe, яка доступна для завантаження з сайту technet.microsoft.com.
Декілька командних файлів, які перемикають лінк C:\WinAVR між різними каталогами, тобто видаляють точку з’єднання та створюють нову, допоможуть легко перемикати версії:

if exist c:\WinAVR junction -d c:\WinAVR
junction c:\WinAVR c:\avr-gcc\WinAVR\20100110

З поширених програм точки з’єднання вміє робити та стирати FAR. Для цього необхідно на каталозі натиснути комбінацію Alt-F6 та задати розміщення та ім’я точки з’єднання:

FAR make symlink

Після створення точка з’єднання поводить себе як каталог, але навпроти її імені написано слово Link, а не Folder.

FAR symlink

Клавішею F8 буде стерто лише точку з’єднання c:\WinAVR, сам каталог c:\avr-gcc\WinAVR\20100110 та весь його вміст залишаться неушкодженими.

Увага! На жаль, незважаючи на підтримку junction points ще у W2K, провідник (File Explorer) навіть у Windows XP поводить себе не як файловий менеджер, а як звичайна програма, тобто вважає точку звичайним каталогом:

link in XP file explorer

На відміну від «нормальних» файлових менеджерів (FAR, Total Commander) програма File Explorer у WinXP (та W2K) при витиранні, у даному випадку, точки з’єднання c:\WinAVR спочатку зітре рекурсивно весь вміст каталогу c:\avr-gcc\WinAVR\20100110, потім видалить точку з’єднання c:\WinAVR, залишивши на згадку порожній каталог c:\avr-gcc\WinAVR\20100110. Такий же недолік у є програми FreeCommander.

А от File Explorer у Win7 вже правильно показує лінки і правильно їх витирає:

explorer-w7-link

Хоча я б сказав, що від Windows 2000 до Windows 7 пройшло стільки часу, що не лише стандартний файловий менеджер операційної системи можна було б навчити працювати з можливостями файлової системи, а і команду del її стандартного командного процесора. З командним процесором взагалі цікава історія — команда dir правильно показує статус точки з’єднання ще у W2K:

dir-w2k-junction-point

При цьому команда del WinAVR витре (нерекурсивно) вміст каталога c:\avr-gcc\WinAVR\20100110 навіть у Windows 7.

Але при певному рівні акуратності можна нормально працювати з junction point як у Windows 7 так і у Windows XP.

В лінуксі ці NTFS junction point у файлових менеджерах та у командному рядку показуються й обробляються як лінки. При видаленні лінка видаляється саме він, а не витирається вміст каталога, на який він вказує.

Leave a Reply

[flagcounter image]