我正在尝试使用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:忍者
如果找不到它的分发版,则必须下载它并将其位置添加到路径环境变量中.
小智 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 生成器初始化失败
你可能仍会受苦
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具有适当权限的可执行文件那么可能是因为同时指定了-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,方法是:
PATH环境变量中PATH环境变量中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则问题将得到解决。
| 归档时间: |
|
| 查看次数: |
26007 次 |
| 最近记录: |