Програмні продукти можна збирати різними способами. Мені зручніше за все робити це за допомогою IDE, але буває, що такий варіант неприйнятний - іноді необхідно зробити модуль, який дозволяв би збирати продукт за ісходникам (ми говоримо про код на C ++) і не вимагав при цьому встановленої Visual Studio. Одним з варіантів вирішення такого завдання є використання утиліти nmake, розробленої Microsoft. У статті описана реалізація цього підходу і дано загальне уявлення про роботу з nmake.
Структура пакета збірки
Є набір фалів, необхідних для роботи компілятора і линкера:
- виконувані файли з. / VisualStudio / vc7 / bin (cl.exe, link.exe etc);
- заголовки;
- статичні бібліотеки:
- динамічні бібліотеки;
- pdb-файли необхідні для складання debug-версій;
Зрозуміло, що має сенс виносити в загальну частину тільки ті файли, які реально використовуються більшістю проектів (вміст ... / VisualStudio / vc7 / PlatformSDK etc). Бібіліотека та заголовки, специфічні для будь-якого проекту, можна зберігати в його каталозі.
Оскільки ці частини будуть використовуватися при складанні кожного срр-проекту, їх можна винести в окреме місце (в моєму випадку це папка з нехитрим ім'ям C: \ buildmastering). З роздумів про те, що б ще поліпшити в області дизайну, народилася світла думка розділити роботу з приготування до збірки і налаштування компілятора з лінкером.
Таким чином, в структурі будь-якого проекту є:
- каталог для початкових кодів;
- каталог для зберігання налаштувань компілятора і линкера;
- каталог для результату виконання збірки;
Про команди, які використовуються в скрипті (такі як @echo off або setlocal enabledelayedexpansion etc), можна почитати в статті Урок bat-Аніко.
Замість створення make-файлу, що містить змінні COMPILER_FILE_SET і LINKER_FILE_SET, може виникнути бажання використовувати змінні оточення. Це рішення не підходить в загальному випадку, так як якщо проект містить багато * .cpp, їх список не поміститься в об'єм, доступний змінної оточення.
висновок
Подяки
Велике спасибі Олексію Александрову за статтю!
Величезне людське спасибі Колі Меркіна за готовність ділитися неосяжним досвідом!