Мой проект построен с использованием CMake и скомпилирован с DistCC + GCC.
Я настраиваю компилятор следующим образом:
SET(CMAKE_C_COMPILER "distcc variation-of-gcc")
Чтобы построить проект, я просто запускаюCMake‘ а потом ‘сделать -jXX».
Хотя distcc действительно ускоряет процесс, я иногда хочу собирать его без распространения — я хочу, чтобы он создавался локально на машине.
Я знаю, что могу изменить DISTCC_HOSTS, чтобы включить только localhost — но это по-прежнему накладывает издержки на сетевые подключения distcc, хотя и быстрее, чем накладные расходы для других машин …
Я также могу сделать это, повторно запустив cmake и изменив CMAKE_C_COMPILER, используя флаги настройки.
Но я ищу способ сделать это, просто добавив флаг непосредственно в «make».
i.e.
# this will use distcc:
make -jXX ...
# this will run locally:
make LOCAL_BUILD=1 -jX ...
Могу ли я использовать трюк с CMake?
Кто-нибудь может помочь?
Спасибо!
Офер
Самое простое, что нужно сделать (IMO) — написать небольшой скрипт в вашем проекте, который вызывает компилятор, и изменить ваши файлы cmake для запуска этого скрипта вместо того, чтобы содержать имя компилятора напрямую:
SET(CMAKE_C_COMPILER "my-gcc-script")
Теперь вы можете сделать так, чтобы этот скрипт обычно запускал distcc, но (на основе переменной окружения или чего-то ещё) также запускался без distcc. Не нужно ничего менять в ваших файлах cmake.
Мы используем это, чтобы разрешить make-time (а не cmake time) включать и выключать флаг -Werror.
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
# TODO: this approach for the WERROR only works with makefiles not Ninja
set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> $(WERROR) -o <OBJECT> -c <SOURCE>")
endif()
Тогда мы бежим
make WERROR=-Werror
включить предупреждения как ошибку
Я ожидаю, что вы могли бы сделать что-то подобное, чтобы использовать distcc из переменной make. Как это
set(CMAKE_CXX_COMPILE_OBJECT "$(USE_DISTCC) <CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
А потом беги либо
make USE_DISTCC=distcc
или просто
make