问题:CMake 中用于 C++ 的 C 编译器 | CMake + git

Issue: C compiler used for C++ in CMake | CMake + git

我一直在使用 CMake 来构建我的下一个 C++ 项目,我不得不 link 一个名为“GLFW”的库到我的可执行文件中。我一直遇到 st运行ge 问题:

这是我的项目结构

GLFW 被克隆到 'dep' 目录。 'build' 目录是我的 CMake 构建目录。 'src' 目录是我的顶级 CMakeLists.txt 的子目录,包含源代码。

顶级CMakeLists.txt:

cmake_minimum_required(VERSION 3.20.1)
set(CMAKE_CXX_STANDARD 20)
project(OpenGL1)
add_subdirectory(dep/glfw)
add_subdirectory(src)
target_link_libraries(${PROJECT_NAME} glfw)

src/CMakeLists.txt:

add_executable(${PROJECT_NAME} main.cpp)

src/main.cpp:

#include <iostream>
int main() 
{
    std::cout<<"Hello, world!\n";
}

我这样配置我的项目(从根目录命令 运行) cmake -G "Ninja" -S . -B build

配置运行良好,但建筑物不: cmake --build build 这会导致 一长串错误:

cmake --build build
[1/127] Building C object dep/glfw/src/CMakeFiles/glfw.dir/monitor.c.obj
FAILED: dep/glfw/src/CMakeFiles/glfw.dir/monitor.c.obj
C:\dev\LLVM\bin\clang.exe -D_GLFW_USE_CONFIG_H -D_UNICODE -I../dep/glfw/include -I../dep/glfw/src -Idep/glfw/src -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd /clang:-Wall -MD -MT dep/glfw/src/CMakeFiles/glfw.dir/monitor.c.obj -MF dep\glfw\src\CMakeFiles\glfw.dir\monitor.c.obj.d -o dep/glfw/src/CMakeFiles/glfw.dir/monitor.c.obj -c ../dep/glfw/src/monitor.c
clang: error: no such file or directory: '/clang:-Wall'
[2/127] Building C object dep/glfw/src/CMakeFiles/glfw.dir/window.c.obj
FAILED: dep/glfw/src/CMakeFiles/glfw.dir/window.c.obj
C:\dev\LLVM\bin\clang.exe -D_GLFW_USE_CONFIG_H -D_UNICODE -I../dep/glfw/include -I../dep/glfw/src -Idep/glfw/src -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd /clang:-Wall -MD -MT dep/glfw/src/CMakeFiles/glfw.dir/window.c.obj -MF dep\glfw\src\CMakeFiles\glfw.dir\window.c.obj.d -o dep/glfw/src/CMakeFiles/glfw.dir/window.c.obj -c ../dep/glfw/src/window.c
clang: error: no such file or directory: '/clang:-Wall'
[3/127] Building C object dep/glfw/src/CMakeFiles/glfw.dir/context.c.obj
FAILED: dep/glfw/src/CMakeFiles/glfw.dir/context.c.obj
C:\dev\LLVM\bin\clang.exe -D_GLFW_USE_CONFIG_H -D_UNICODE -I../dep/glfw/include -I../dep/glfw/src -Idep/glfw/src -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd /clang:-Wall -MD -MT dep/glfw/src/CMakeFiles/glfw.dir/context.c.obj -MF dep\glfw\src\CMakeFiles\glfw.dir\context.c.obj.d -o dep/glfw/src/CMakeFiles/glfw.dir/context.c.obj -c ../dep/glfw/src/context.c
clang: error: no such file or directory: '/clang:-Wall'
[4/127] Building C object dep/glfw/src/CMakeFiles/glfw.dir/init.c.obj
FAILED: dep/glfw/src/CMakeFiles/glfw.dir/init.c.obj
C:\dev\LLVM\bin\clang.exe -D_GLFW_USE_CONFIG_H -D_UNICODE -I../dep/glfw/include -I../dep/glfw/src -Idep/glfw/src -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd /clang:-Wall -MD -MT dep/glfw/src/CMakeFiles/glfw.dir/init.c.obj -MF dep\glfw\src\CMakeFiles\glfw.dir\init.c.obj.d -o dep/glfw/src/CMakeFiles/glfw.dir/init.c.obj -c ../dep/glfw/src/init.c
clang: error: no such file or directory: '/clang:-Wall'
[5/127] Building C object dep/glfw/src/CMakeFiles/glfw.dir/input.c.obj
FAILED: dep/glfw/src/CMakeFiles/glfw.dir/input.c.obj
C:\dev\LLVM\bin\clang.exe -D_GLFW_USE_CONFIG_H -D_UNICODE -I../dep/glfw/include -I../dep/glfw/src -Idep/glfw/src -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd /clang:-Wall -MD -MT dep/glfw/src/CMakeFiles/glfw.dir/input.c.obj -MF dep\glfw\src\CMakeFiles\glfw.dir\input.c.obj.d -o dep/glfw/src/CMakeFiles/glfw.dir/input.c.obj -c ../dep/glfw/src/input.c
clang: error: no such file or directory: '/clang:-Wall'
[6/127] Building C object dep/glfw/src/CMakeFiles/glfw.dir/vulkan.c.obj
FAILED: dep/glfw/src/CMakeFiles/glfw.dir/vulkan.c.obj
C:\dev\LLVM\bin\clang.exe -D_GLFW_USE_CONFIG_H -D_UNICODE -I../dep/glfw/include -I../dep/glfw/src -Idep/glfw/src -g -Xclang -gcodeview -O0 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd /clang:-Wall -MD -MT dep/glfw/src/CMakeFiles/glfw.dir/vulkan.c.obj -MF dep\glfw\src\CMakeFiles\glfw.dir\vulkan.c.obj.d -o dep/glfw/src/CMakeFiles/glfw.dir/vulkan.c.obj -c ../dep/glfw/src/vulkan.c
clang: error: no such file or directory: '/clang:-Wall'
ninja: build stopped: subcommand failed.

我不知道这是 glfw CMakeLists.txt 的问题还是我的系统的问题,但是当我从我的顶级 CMakeLists.txt 中删除依赖 GLFW 的功能时,没有错误。

请注意,我曾尝试使用 git 子模块,但遇到了同样的错误,所以我使用这种方式,因为它更直接。

我在 windows 并且我正在使用 Ninja,我没有使用 git repo,该项目只是我电脑上的一些文件。 如何修复这些错误? 在此先感谢您:) 随意询问其他文件的内容 - 文件太多,无法将它们全部放在这里。

你的项目很好。您刚好 运行 遇到了 glfw 中的一个错误:https://github.com/glfw/glfw/issues/1807

已修复,但尚未发布。因此,您最好的选择是克隆 master 分支,或者在 3.3.5 发布之前手动应用解决源版本问题的任何修复。