C ++ с git и CMake: как создавать подмодули с конкретными параметрами?

Рассмотрим проект C ++, организованный в репозитории git. Предположим, что в репозитории git есть подмодуль, из которого построена библиотека, от которой зависит (супер) проект. Если (супер) проект зависит не только от библиотеки, но и от библиотеки, созданной с определенными (CMake) параметрами, как можно гарантировать, что подмодуль будет создан с этими параметрами при создании (супер) проекта?

5

Решение

Варианты сборки (например, MYLIB_WITH_SQLITE) необходимо добавить к интерфейсу библиотеки, то есть к MYLIB_DEFINITIONS переменная в случае старого конфигурационного модуля или INTERFACE_COMPILE_DEFINITIONS свойство, если библиотека создает свой config-модуль с install(EXPORT ...) команда:

add_library(mylib ...)
if(MYLIB_WITH_SQLITE)
target_compile_definitions(mylib PUBLIC MYLIB_WITH_SQLITE)
endif()
...
install(TARGETS mylib EXPORT mylib-targets ...)
install(EXPORT mylib-targets ...)

А в потребляющей библиотеке или исполняемом файле вы можете написать простые проверки во время компиляции:

#ifndef MYLIB_WITH_SQLITE
#error mylib must be built with sqlite
#endif
1

Другие решения

CMake поддерживает внешние проекты с ExternalProject_Add где вы можете определить флаги компиляции и более по своему вкусу. Используйте его для создания своих подмодулей.

Больше деталей: https://cmake.org/cmake/help/v3.2/module/ExternalProject.html

0

Я думаю, что самый простой ответ заключается в использовании -C вариант, как описано в этом Так ответь.

-1

Одно из решений, которое я рассматриваю, состоит в том, чтобы разветвить репо подмодуля, отредактировать CMakeLists.txt так, чтобы он был более конкретным, а затем включить HEAD-версию разветвленного репо в качестве подмодуля. Не элегантный, но приемлемый.

-1
По вопросам рекламы [email protected]