忍者没有找到忍者

use*_*995 5 cmake ninja

我正在尝试使用cmake构建我从github获得的一些代码,但不断收到以下错误:

CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER
CMake Error: Could not find cmake module file:/golang/project/src/github.com/devsisters/goquic/libquic/build/debug/CMakeFiles/2.8.11/CMakeCCompiler.cmake
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER
CMake Error: Could not find cmake module file:/golang/project/src/github.com/devsisters/goquic/libquic/build/debug/CMakeFiles/2.8.11/CMakeCXXCompiler.cmake
-- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何正确设置这些变量?谢谢.

使用github代码附带的./build_libs.sh文件来构建它.

PYK*_*PYK 21

在 Debian/Ubuntu 系统中,继续安装它

apt install ninja-build
Run Code Online (Sandbox Code Playgroud)

然后重新运行 CMake。


Dav*_*ant 16

您正在执行的脚本使用cmake Ninja生成器.要做到这一点你需要忍者在路上.在大多数Linux发行版上,您可以从包中安装它.

Ubuntu:ninja-build

OpenSUSE:忍者

如果找不到它的分发版,则必须下载它并将其位置添加到路径环境变量中.

  • Mac:“brew install cmake ninja”(来源:https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/macos-setup.html) (3认同)
  • 感谢您的回答。我已经下载并构建了 ninja,并将其添加到我的 $PATH 变量中,但仍然看到此错误。我正在使用 redhat 如果这有什么区别的话 (2认同)
  • 好吧,如果它真的在你PATH你应该能够运行它.运行`echo $ PATH`并确保文件夹忍者在那里. (2认同)
  • 也许您必须清除 CMake 缓存。只需删除构建目录中的 CMakeCache.txt 即可。 (2认同)

小智 7

我的解决方案:符号链接“忍者建设”到“忍者”。

# ln -s /usr/bin/ninja /usr/bin/ninja-build
Run Code Online (Sandbox Code Playgroud)

这仅适用于非常老的CMake版本,我将在下面进行解释。

我已经将新的“忍者”二进制文件放到/ usr / bin中,并检查它是否具有0755权限。直到我在generator命令上运行strace之前,我都感到沮丧。

# strace cmake -GNinja .. | grep -i ninja
access("ninja-build", R_OK)             = -1 ENOENT (No such file or directory)
access("/usr/local/sbin/ninja-build", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/bin/ninja-build", R_OK) = -1 ENOENT (No such file or directory)
access("/sbin/ninja-build", R_OK)       = -1 ENOENT (No such file or directory)
access("/bin/ninja-build", R_OK)        = -1 ENOENT (No such file or directory)
access("/usr/sbin/ninja-build", R_OK)   = -1 ENOENT (No such file or directory)
access("/usr/bin/ninja-build", R_OK)    = -1 ENOENT (No such file or directory)
access("/opt/texlive/2016/bin/i386-linux/ninja-build", R_OK) = -1 ENOENT (No such file or directory)
access("/root/bin/ninja-build", R_OK)   = -1 ENOENT (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

它正在寻找“忍者建造”,而不是“忍者”!

在Windows和Linux上,我广泛使用CMake和Ninja进行工作。那么,为什么我以前没有看到过该错误?

好吧……在这种情况下,我使用的是非常老的CMake版本2.8.12。它太老了,几乎被僵化了。因此,大概是稍后修复的CMake错误,或者Ninja项目在某个时候更改了二进制文件的名称。


小智 5

如果ninja$PATH 中确实存在并且仍然不起作用,则应通过 .conf 检查可执行文件的权限ls -l /PATH/TO/NINJA。确保其他人具有读取和执行权限(如“-rwxr-xr-x”)。

另请参阅:0013910:如果 /usr/bin/ninja 不是全局可读的,则 Ninja 生成器初始化失败


Hax*_*raZ 5

你可能仍会受苦

CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
Run Code Online (Sandbox Code Playgroud)

即使你已经拥有: :

  • 放入ninja你的路径
  • ninja具有适当权限的可执行文件
  • 较新版本的 cmake**

那么可能是因为同时指定了-D CMAKE_MAKE_PROGRAM和,但其值无效(例如为空)-G NinjaCMAKE_MAKE_PROGRAM

例如

Android Studio 与 gradle 插件版本:

classpath 'com.android.tools.build:gradle:7.0.0-alpha03'
Run Code Online (Sandbox Code Playgroud)

并且不使用 SDK Manager 提供的 cmake,方法是:

  • 将cmake可执行文件放入PATH环境变量中
  • 将 ninja 可执行文件放入PATH环境变量中
  • 指定 cmake 版本等于PATH模块中的版本build.gradle,例如:
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.19.1" // this line
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后实际上 gradle 像这样调用 cmake:

cmake ^
-HD:\dev\android_cv_examples\HelloNDK7\app\src\main\cpp ^
-DCMAKE_SYSTEM_NAME=Android ^
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON ^
-DCMAKE_SYSTEM_VERSION=26 ^
-DANDROID_ABI=arm64-v8a ^
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a ^
-DANDROID_NDK=D:\soft\Android\ndk-r21b ^
-DCMAKE_ANDROID_NDK=D:\soft\Android\ndk-r21b ^
-DCMAKE_TOOLCHAIN_FILE=D:\soft\Android\ndk-r21b\build\cmake\android.toolchain.cmake ^
-DCMAKE_MAKE_PROGRAM= ^
-DCMAKE_C_FLAGS= ^
-DCMAKE_CXX_FLAGS=-std=c++11 ^
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=D:\dev\android_cv_examples\HelloNDK7\app\build\intermediates\cmake\debug\obj\arm64-v8a ^
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=D:\dev\android_cv_examples\HelloNDK7\app\build\intermediates\cmake\debug\obj\arm64-v8a ^
-DCMAKE_BUILD_TYPE=Debug ^
-BD:\dev\android_cv_examples\HelloNDK7\app\.cxx\cmake\debug\arm64-v8a ^
-GNinja ^
-DANDROID_PLATFORM=android-24
Run Code Online (Sandbox Code Playgroud)

注意:如果删除以前的 cmake 构建缓存,并通过删除修改该调用脚本,-DCMAKE_MAKE_PROGRAM则问题将得到解决。