Збірка cpp-проектів за допомогою nmake

Програмні продукти можна збирати різними способами. Мені зручніше за все робити це за допомогою 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, їх список не поміститься в об'єм, доступний змінної оточення.

висновок

Подяки

Велике спасибі Олексію Александрову за статтю!

Величезне людське спасибі Колі Меркіна за готовність ділитися неосяжним досвідом!

Схожі статті