Как я могу скомпилировать c ++ в несколько файлов? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть программа (cpp) со многими классами. Каждый класс находится в отдельном исходном файле (.h +. cpp).
Как разделить скомпилированную программу на несколько файлов (вместо одного большого исполняемого файла)?
Скажем, один файл для каждого класса (аналогично структуре кода).
Чтобы при каждом изменении в указанном c классе я компилировал только этот класс и заменял указанный c скомпилированный файл, связанный с этим классом.
( Нечто похожее на файлы .DLL в Windows.)

Пример из реальной жизни:
Я создаю TUI-интерфейс для управления mysql.
Я хотел бы создать mysql текстовый редактор (TUI) с курсами.

код (класс) для создания и управления объектом единого окна находится в 'textWin. cpp' + 'textWin.h'

код (класс) для управления несколькими windows , путем создания windows объектов из предыдущего класса в WinMan. cpp winMan.h

код (класс) для управления mysql база данных находится в: mysql. cpp mysql .h

и так далее ...

Итак, у меня есть следующие файлы:
MyProgram. cpp
- winMan. cpp + winMan.h
- textWin. cpp + textWin.h
- mysql. cpp + mysql .h
- ..
- ..

После компиляции g ++ Я получаю один исполняемый файл './MyProgram' (размером около 15 Мб.), Который я доставляю всем своим клиентам (1000 из них).

Я только что нашел опечатку в textWin. cpp, я исправил ее и сказал всем клиентам, что есть обновление ... всем им нужно скачать один большой 15 МБ файл, который потребляет много пропускной способности и ресурсов сервера, для небольшого обновления.
Есть ли способ отправить всем моим клиентам меньший файл, который содержит только скомпилированный код для класса textWin?

Я использую g ++ на Centos7

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

Компилятор g cc с радостью примет список cpp файлов для компиляции в один исполняемый файл. Вам не нужно писать «содержащий» cpp файл. Тем не менее, у вас все еще есть проблема, что каждый раз, когда он перестраивает их все.

Альтернативой является создание каждого исходного файла отдельно в объектный файл, а затем связать их все вместе. Надеемся, что каждый из этих вызовов компилятора добавит меньше времени, чем отдельная командная строка. Но как отследить, какие cpp файлы действительно нужно перестроить?

Обычный подход - использовать make-файл и утилиту make, которая проверяет даты всех упомянутых файлов. Существует множество разновидностей make-файлов и вспомогательных make-файлов. Скачайте простой пакет, такой как gzip, и вы сможете быстро понять, как структурирован Makefile. Кроме того, в Интернете много помощи, или вы можете решить, что это слишком сложная задача для проекта с 5 файлами.

0 голосов
/ 18 февраля 2020

Как указано в комментариях @ RSahu
Общие библиотеки (.so файлы) - это способ разделения вашего скомпилированного кода.

Вот небольшой пример:
https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html

0 голосов
/ 18 февраля 2020

Конечно, вы можете поместить свои тексты в отдельные текстовые файлы и развертывать только те, в которых есть ошибка. Для вашего особого случая использования, где должны быть развернуты двоичные различия, этот вопрос может быть полезен: Как создать двоичные исправления?

Другой вариант - сделать правильное управление версиями. Таким образом, ваши клиенты смогут решить сами. То есть, если им нужно это обновление.

...