Как автоматически загружать зависимости C ++ кроссплатформенным способом + CMake? - PullRequest
18 голосов
/ 16 ноября 2011

В основном я хочу добиться этого рабочего процесса:

  1. Извлечение из хранилища в системе Windows (или любой другой платформе).

  2. Запустите некоторый инструмент, который получает зависимости, включает в себя и библиотеки, и размещает их на своем месте (как в "\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ Lib и \ Includes" в окнах)

  3. Запустите CMake (создает проекты MSVS на win)

  4. Откройте проект MSVS и скомпилируйте его.

И я хотел бы иметьэтот рабочий процесс на большинстве платформ.

Я не хочу загружать зависимости вручную

Как это сделать без сохранения зависимостей в хранилище?Каков наилучший способ добиться этого?

Ответы [ 2 ]

21 голосов
/ 16 ноября 2011

В CMake вы можете использовать file(DOWNLOAD URL PATH) до скачать файл , объединить это с пользовательскими командами для загрузки и распаковки:

set(MY_URL "http://...")
set(MY_DOWNLOAD_PATH "path/to/download/to")
set(MY_EXTRACTED_FILE "path/to/extracted/file")

if (NOT EXISTS "${MY_DOWNLOAD_PATH}")
    file(DOWNLOAD "${MY_URL}" "${MY_DOWNLOAD_PATH}")
endif()

add_custom_command(
    OUTPUT "${MY_EXTRACTED_FILE}"
    COMMAND command to unpack
    DEPENDS "${MY_DOWNLOAD_PATH}")

Ваша цель должна зависеть от вывода пользовательской команды, тогда при запуске CMake файл будет загружен, а при сборке, извлечении и использовании.

Все это может быть заключено в макрос для упрощения использования.

Вы также можете посмотреть на использование модуля CMake ExternalProject , который может делать то, что вы хотите.

0 голосов
/ 02 декабря 2011

Лучший способ добиться этого - устранить ваши зависимости.

Зависимости - это зло.

Уничтожьте их вместо зависимости от них.

Серьезно.

Вы не хотите загружать их вручную, вы не хотите хранить их в своем хранилище, ваши клиенты не хотят загружать их для вас. Фактически, ваш компилятор даже не хочет их компилировать.

Предпочитают переход на java для добавления зависимости библиотеки C ++ ...

Между тем, предложение проверить модуль CMake ExternalProject - самое близкое, что вам нужно, к автоматическому хранению зависимостей-загрузке-настройке-сборке-и-хранилищу, не хранимому в хранилище. установить в ближайшее время с помощью сборки на основе CMake.

...