Делаю проект с компиляцией под несколько платформ на c++. Некоторые файлы нужно прогнать утилитой (для простоты понимания скажем, что это транспилятор). Этот транспилятор нужно собрать из исходников, для него уже настроен CMakeLists.txt.
Подключаю его так:
add_subdirectory(my/transpilator)
Ну и добавляю таргет:
add_custom_target(transpile ALL COMMAND ${CMAKE_COMMAND} -D...
-DTRANSPILER_EXECUTABLE=$<TARGET_FILE:my_transpiler> -P transpile_all.cmake)
Подключаю его как зависимость к главному таргету и при сборке transpile_all.cmake транспилирует нужные файлы.
Проблема же возникает на платформах вроде Android или IOS. Так как для них нужно настраивать специфическое окружение, флаги компилятора, архитектуру и прочее, очевидно, что при подключении проекта транспилятора через add_subdirectory он унаследует все эти настройки. Окружение же настраивается тулчейном и добавить add_subdirectory перед настройкой окружения я не могу.
На данный момент думаю использовать "костыльное" решение - запускать cmake для транспилятора во время конфигурации и компилировать его. Что-то вроде:
execute_process(COMMAND ${CMAKE_COMMAND} -Htranspiler/folder -Btranspiler/output)
execute_process(COMMAND ${CMAKE_COMMAND} --build transpiler/folder ...)
Потом там экспортировать какую-нибудь переменную окружения и читать из нее путь до бинарника, чтобы передать в transpile_all.cmake.
В правильном ли я направлении думаю, или же есть какой-то способ, скажем, сделать add_subdirectory, но без наследования настроек окружения, или что-то подобное?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости