CMake не может найти ниндзя при запуске в QtCreator

У меня есть вызов find_program в моем файле CMakeLists.txt, чтобы найти путь к Ninja. Это возвращает правильное значение, когда я запускаю ниндзя через командную строку, но терпит неудачу, когда я запускаю его в QtCreator:

find_program(
    CMAKE_MAKE_PROGRAM
    NAME ninja
    PATHS /opt/local/bin
  )
  message(${CMAKE_MAKE_PROGRAM})

В ниндзя это возвращает:

/opt/local/bin/ninja

В QtCreator это возвращает:

/usr/bin/make

Почему CMake не находит то, что присутствует в $PATH?


person ruipacheco    schedule 24.01.2019    source источник


Ответы (2)


Из документации find_program():

Запись кэша с именем VAR создается для хранения результата этой команды. Если программа найдена, результат сохраняется в переменной, и поиск не будет повторяться, пока переменная не будет очищена.

В вашем случае CMAKE_MAKE_PROGRAM кэшируется как /usr/bin/make (вероятно, это было в какой-то момент установлено QtCreator), поэтому find_program() ничего не делает.

Правильным способом переключения между make и ninja будет использование CMake генераторы.

person Kane    schedule 24.01.2019

Переменная CMAKE_MAKE_PROGRAM кэшируется. генератором CMake. find_program не обновляет кэшированную переменную, если она не содержит *-NOTFOUND.

Вам нужно использовать другую переменную в вызове find_program, а затем обновить переменную CMAKE_MAKE_PROGRAM с помощью set(CACHE ... FORCE):

set(CMAKE_MAKE_PROGRAM <new-value> CACHE FILEPATH "" FORCE)

Обратите внимание, что переключение CMAKE_MAKE_PROGRAM с make на ninja не является правильным способом изменения генератор CMake. Вам нужно передать правильный генератор CMake через параметр -G самому cmake.

person Tsyvarev    schedule 24.01.2019