CMake не может найти ниндзя при запуске в QtCreator - PullRequest
0 голосов
/ 24 января 2019

У меня есть вызов find_program в моем файле CMakeLists.txt, чтобы найти путь к ниндзя.Это возвращает правильное значение, когда я запускаю ниндзя через командную строку, но завершается неудачно, когда я запускаю его в 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?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

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

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

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

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

0 голосов
/ 24 января 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.

...