在QtCreator中运行时,CMake找不到忍者
我打电话在我的CMakeLists.txt文件中查找_程序,以找到忍者的路径。当我通过命令行运行ninja时,返回正确的值,但当我在QtCreator中运行时失败:在QtCreator中运行时,CMake找不到忍者,cmake,qt-creator,ninja,Cmake,Qt Creator,Ninja,我打电话在我的CMakeLists.txt文件中查找_程序,以找到忍者的路径。当我通过命令行运行ninja时,返回正确的值,但当我在QtCreator中运行时失败: find_program( CMAKE_MAKE_PROGRAM NAME ninja PATHS /opt/local/bin ) message(${CMAKE_MAKE_PROGRAM}) 在《忍者》中,这种回归: /opt/local/bin/ninja /usr/bin/make 在此
find_program(
CMAKE_MAKE_PROGRAM
NAME ninja
PATHS /opt/local/bin
)
message(${CMAKE_MAKE_PROGRAM})
在《忍者》中,这种回归:
/opt/local/bin/ninja
/usr/bin/make
在此情况下,返回:
/opt/local/bin/ninja
/usr/bin/make
为什么CMake找不到$PATH中存在的内容?该变量由CMake生成器缓存<代码>查找程序不更新缓存变量,除非它包含*-NOTFOUND
您需要在find_program
调用中使用其他变量,然后使用set(CACHE…FORCE)
更新CMAKE_MAKE_program
变量:
set(CMAKE\u MAKE\u程序缓存文件路径”“强制)
请注意,将
CMAKE\u MAKE\u程序
从MAKE
切换到ninja
不是一种正确的更改方式。您需要通过-G
选项将正确的CMake生成器传递到CMake
本身。来自以下文档:
将创建一个名为VAR的缓存条目来存储此命令的结果。如果找到程序,结果将存储在变量中,除非清除变量,否则不会重复搜索
在您的情况下,CMAKE\u MAKE\u程序
恰好被缓存为/usr/bin/MAKE
(可能是在某个点上由QtCreator设置的),因此find\u PROGRAM()
什么也不做
在make
和ninja
之间切换的正确方法是使用