CMake 编译在 MSYS2 上失败
CMake compilation failing on MSYS2
我正在尝试为我正在处理的项目设置 CMake,我首先尝试用 C 语言编译一个简单的 Hello World 程序。我正在使用 Windows 10 和 MSYS2 .如果我直接在 Bash 中调用编译器 (GCC),它会在没有警告或错误的情况下正常编译,并给出一个可执行文件作为输出,完全按预期打印 "Hello, world!"。当我尝试使用 CMake 编译我的项目时,我的问题就来了。当我 运行 cmake -G Ninja ..
编译我的项目时,它抛出这个错误:
CMake Error at C:/msys64/mingw64/share/cmake-3.15/Modules/CMakeTestCCompiler.cmake:60 (message):
The C compiler
"C:/msys64/mingw64/bin/cc.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/Users/dylanweber/Documents/C-Projects/webapp/build/CMakeFiles/CMakeTmp
Run Build Command(s):C:/msys64/usr/bin/ninja.exe cmTC_45340 && [1/2] Building C object CMakeFiles/cmTC_45340.dir/testCCompiler.c.obj
FAILED: CMakeFiles/cmTC_45340.dir/testCCompiler.c.obj
C:\msys64\mingw64\bin\cc.exe -o CMakeFiles/cmTC_45340.dir/testCCompiler.c.obj -c testCCompiler.c
/bin/sh: C:msys64mingw64bincc.exe: command not found
ninja: build stopped: subcommand failed.
注意它是如何提到 C:msys64mingw64bingcc.exe
...肯定存在某种路径描述问题,但我已尝试将 CC
环境变量设置为 C:\msys64\mingw64\bin\gcc.exe
和 C:/msys64/mingw64/bin/gcc.exe
.我一直在 运行 秒之间清除 CMake 缓存。
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.15)
project(webapp)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
file(GLOB SOURCES "main/*.c")
add_executable(webapp ${SOURCES})
我的代码位于 "main" 文件夹中,该文件夹目前只有一个 "main.c" 文件,此外还有一个用于保存所有临时文件的构建目录。最令人沮丧的部分是 CMake 一个小时前才开始工作,我什么都没改。我该怎么做才能解决这个问题?
解决方案不仅是安装 CMake 的 MinGW64 版本,还要安装 Ninja 的 MinGW64 版本。由于与 MSYS 相比,它们具有不同的路径方案,因此在它们都在同一个 POSIX 类平台上之前,它们不能很好地协同工作。
我正在尝试为我正在处理的项目设置 CMake,我首先尝试用 C 语言编译一个简单的 Hello World 程序。我正在使用 Windows 10 和 MSYS2 .如果我直接在 Bash 中调用编译器 (GCC),它会在没有警告或错误的情况下正常编译,并给出一个可执行文件作为输出,完全按预期打印 "Hello, world!"。当我尝试使用 CMake 编译我的项目时,我的问题就来了。当我 运行 cmake -G Ninja ..
编译我的项目时,它抛出这个错误:
CMake Error at C:/msys64/mingw64/share/cmake-3.15/Modules/CMakeTestCCompiler.cmake:60 (message):
The C compiler
"C:/msys64/mingw64/bin/cc.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/Users/dylanweber/Documents/C-Projects/webapp/build/CMakeFiles/CMakeTmp
Run Build Command(s):C:/msys64/usr/bin/ninja.exe cmTC_45340 && [1/2] Building C object CMakeFiles/cmTC_45340.dir/testCCompiler.c.obj
FAILED: CMakeFiles/cmTC_45340.dir/testCCompiler.c.obj
C:\msys64\mingw64\bin\cc.exe -o CMakeFiles/cmTC_45340.dir/testCCompiler.c.obj -c testCCompiler.c
/bin/sh: C:msys64mingw64bincc.exe: command not found
ninja: build stopped: subcommand failed.
注意它是如何提到 C:msys64mingw64bingcc.exe
...肯定存在某种路径描述问题,但我已尝试将 CC
环境变量设置为 C:\msys64\mingw64\bin\gcc.exe
和 C:/msys64/mingw64/bin/gcc.exe
.我一直在 运行 秒之间清除 CMake 缓存。
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.15)
project(webapp)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
file(GLOB SOURCES "main/*.c")
add_executable(webapp ${SOURCES})
我的代码位于 "main" 文件夹中,该文件夹目前只有一个 "main.c" 文件,此外还有一个用于保存所有临时文件的构建目录。最令人沮丧的部分是 CMake 一个小时前才开始工作,我什么都没改。我该怎么做才能解决这个问题?
解决方案不仅是安装 CMake 的 MinGW64 版本,还要安装 Ninja 的 MinGW64 版本。由于与 MSYS 相比,它们具有不同的路径方案,因此在它们都在同一个 POSIX 类平台上之前,它们不能很好地协同工作。