установить приложение C ++ с помощью CMake в нескольких системах - PullRequest
0 голосов
/ 09 мая 2020

Я написал простое приложение openGL, используя C ++ и SDL2. Я скомпилировал его с помощью CMake на linux, и все работает нормально. Как мне теперь запустить мою программу в других системах? Можно ли скомпилировать программу на моей машине linux, а затем открыть скомпилированный выходной файл на другой машине linux? Или каждая машина должна компилировать свою версию программы? А как насчет библиотеки SDL2 и Freetype, которые я связываю в своем файле CMake? Я предполагаю, что в каждой системе, которая компилирует мою программу, должны быть установлены эти библиотеки? Что, если я хочу запустить свое приложение на Windows? Если каждой системе необходимо скомпилировать свою собственную версию, есть ли простой способ создать установщик с использованием файла CMake?

1 Ответ

0 голосов
/ 09 мая 2020
  1. Двоичное распределение

    Как мне теперь запустить мою программу в других системах?

Это зависит от двух вещей: Для запуска предварительно созданное приложение в другой системе, эта другая система должна быть совместима как в ПО, так и в аппаратном обеспечении; это означает, что оба SW API и ( HW-архитектура ) должны быть «достаточно близкими». Например, если вы создали приложение на любом типе P C на Linux и использовали OpenGL и SDL2, а также системные библиотеки Linux, вы программируете "в зависимости" от каждой из этих вещей, чтобы запустить. В частности, это зависит от конкретных версий API OpenGL, SDL2 и API ОС, а также от аппаратного обеспечения (включая, помимо прочего, набор инструкций ЦП ). Чтобы создать переносимое приложение, которое может работать на других машинах, вам необходимо определить механизм распространения (исходный или двоичный), а затем решить проблему. Эта часть вашего вопроса больше похожа на двоичное распределение. Для двоичного распространения вам необходимо предоставить зависимости вашему приложению либо напрямую (включив их в свой пакет), либо косвенно, предоставив интеллектуальный установщик, который загрузит зависимости и установит их вместе с вашим приложением. Самый простой способ начать решение - статически связать ваши основные зависимости, если вы знаете, что они не входят в стандартную комплектацию вашей целевой ОС. В общем, рассмотрите возможность создания пакета из вашего приложения, если вы хотите go таким образом. Подумайте об использовании CPack , если вы используете CMake.

Исходный код

Можно ли скомпилировать программу на моем Linux компьютере, а затем открыть скомпилированный выходной файл на другом Linux компьютере? Или каждая машина должна компилировать свою версию программы? А как насчет библиотеки SDL2 и Freetype, которые я связываю в своем файле CMake? ? Я предполагаю, что в каждой системе, которая компилирует мою программу, должны быть установлены эти библиотеки?

Если вы имеете в виду, можно ли перестроить ваше приложение на другом компьютере и запустить его на том же machine, ответ таков: такой подход устранит зависимости HW, но все равно оставит все зависимости SW. Этот подход выглядит как распространение исходного кода. Чтобы решить проблему зависимости SW, вы должны сначала определить их в вашем файле CMake. Некоторые из возможностей здесь - использовать CMake pkgconfig или использовать собственный пакет CMake . как только вы это сделаете, скрипт CMake будет обрабатывать зависимости за вас, в некоторой степени.

Кросс-платформенная разработка

Что, если я хочу запустить свое приложение на Windows? В случае, если каждая система должна скомпилировать свою собственную версию, есть ли простой способ создать установщик с помощью файла cmake?

Для этого вам необходимо определить уровень переносимости ОС в вашем приложении. вы не можете напрямую использовать системные библиотеки Linux или Windows. Если вы можете строго придерживаться того подмножества POSIX, которое поддерживает Windows, это можно сделать с небольшими или умеренными усилиями. В противном случае вам придется определить свой API переносимости и реализовать его для всех платформ, которые вам интересны. После того, как вы решили кроссплатформенную часть, все сводится к исходному или двоичному распространению (части 1 и 2 этого ответа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...