使用 Mingw-w64 编译 Google 测试
Compiling Google test with Mingw-w64
我正在尝试在 Windows 10 机器上使用 Mingw-w64 编译 Google 测试,但我总是收到错误消息:
C:\git\tdd\googletest>cmake CMakeLists.txt -G "MinGW Makefiles"
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
这就是我正在做的事情:
- 打开一个 Windows CMD 终端并更改我下载 google test
的文件夹 t
- 将CMake、make和g++添加到路径
set PATH="C:\Program Files\CMake\bin";"C:\msys\bin";"C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin";%PATH%
- 运行 CMake 与
cmake CMakeLists.txt -G "MinGW Makefiles"
这些是工具的版本:
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i686-pc-msys
- cmake 版本 3.15.3
- g++(i686-posix-dwarf-rev0,由 MinGW-W64 项目构建)8.1.0
make来自MSYS package from Mingw-64w. I cloned Google Test from here
非常感谢任何帮助!
编辑 1
CMake/MinGW unknown compilers, gcc.exe broken 中的 None 个解决方案有效。
编辑 2
我也尝试过使用环境变量来告诉 CMake 使用哪些工具。
- 已将工具的文件夹添加到 PATH:
set PATH="C:\Program Files\CMake\bin";"C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin";%PATH%
- 使用
调用 CMake
cmake -DCMAKE_C_COMPILER="C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc" -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/g++" -DCMAKE_MAKE_PROGRAM="C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/mingw32-make.exe" CMakeLists.txt -G "MinGW Makefiles"
我收到这个错误:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_C_COMPILER:
C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_CXX_COMPILER:
C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/g++
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "C:/git/tdd/googletest/CMakeFiles/CMakeOutput.log".
See also "C:/git/tdd/googletest/CMakeFiles/CMakeError.log".
由于 g++ 和 gcc 在 PATH 中,我也尝试这样调用 CMake:
cmake -DCMAKE_C_COMPILER="gcc" -DCMAKE_CXX_COMPILER="g++" -DCMAKE_MAKE_PROGRAM="mingw32-make.exe" CMakeLists.txt -G "MinGW Makefiles"
这会产生与上一次尝试相同的错误:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_C_COMPILER:
gcc
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_CXX_COMPILER:
g++
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "C:/git/tdd/googletest/CMakeFiles/CMakeOutput.log".
See also "C:/git/tdd/googletest/CMakeFiles/CMakeError.log".
但是,我可以调用g++
:
C:\git\tdd\googletest>g++
g++: fatal error: no input files
compilation terminated.
再次感谢!
好的,我设法使用 CMDER 的 Bash 控制台编译了它。假设您在 C:\mingw-w64\
(路径中没有空格)安装了 Mingw-w64,这些步骤将使您在 Mingw-w64[下得到一个工作的 Google 测试库
- 将路径设置为:
PATH=/c/Program\ Files/CMake/bin:/c/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin:$PATH
- 使用
调用 CMake
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_MAKE_PROGRAM=mingw32-make.exe CMakeLists.txt -G 'MSYS Makefiles'
- 构建方式
mingw32-make.exe -j8
我要冒昧地说这可能适用于 Git Bash shell。我仍然没有使用常规 Windows CMD 终端构建它的解决方案。
您最初的问题源于选择对 MSYS2 使用 make.exe
连同 MinGW-w64 编译器,make.exe 版本不支持。与 MinGW-w64 一起使用的正确程序是 mingw32-make.exe,它是 MinGW-w64 发行版的一部分。我不能完全理解你后来的编辑,但是例如这在 cmd.exe:
中非常有效
set "PATH=C:\Program Files\CMake\bin;%PATH%"
set "PATH=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH%"
cmake ^
-G "MinGW Makefiles" ^
-D CMAKE_C_COMPILER=gcc.exe ^
-D CMAKE_CXX_COMPILER=g++.exe ^
-D CMAKE_MAKE_PROGRAM=mingw32-make.exe ^
.
mingw32-make.exe
这里,我使用了:
- CMake 3.15.2,
- MinGW-w64 8.1.0 (x86_64-8.1.0-posix-seh-rt_v6-rev0),
- 和 Google 测试的当前 git 版本。
我正在尝试在 Windows 10 机器上使用 Mingw-w64 编译 Google 测试,但我总是收到错误消息:
C:\git\tdd\googletest>cmake CMakeLists.txt -G "MinGW Makefiles"
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
这就是我正在做的事情:
- 打开一个 Windows CMD 终端并更改我下载 google test 的文件夹 t
- 将CMake、make和g++添加到路径
set PATH="C:\Program Files\CMake\bin";"C:\msys\bin";"C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin";%PATH%
- 运行 CMake 与
cmake CMakeLists.txt -G "MinGW Makefiles"
这些是工具的版本:
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i686-pc-msys
- cmake 版本 3.15.3
- g++(i686-posix-dwarf-rev0,由 MinGW-W64 项目构建)8.1.0
make来自MSYS package from Mingw-64w. I cloned Google Test from here
非常感谢任何帮助!
编辑 1
CMake/MinGW unknown compilers, gcc.exe broken 中的None 个解决方案有效。
编辑 2
我也尝试过使用环境变量来告诉 CMake 使用哪些工具。
- 已将工具的文件夹添加到 PATH:
set PATH="C:\Program Files\CMake\bin";"C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin";%PATH%
- 使用 调用 CMake
cmake -DCMAKE_C_COMPILER="C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc" -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/g++" -DCMAKE_MAKE_PROGRAM="C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/mingw32-make.exe" CMakeLists.txt -G "MinGW Makefiles"
我收到这个错误:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_C_COMPILER:
C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_CXX_COMPILER:
C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/g++
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "C:/git/tdd/googletest/CMakeFiles/CMakeOutput.log".
See also "C:/git/tdd/googletest/CMakeFiles/CMakeError.log".
由于 g++ 和 gcc 在 PATH 中,我也尝试这样调用 CMake:
cmake -DCMAKE_C_COMPILER="gcc" -DCMAKE_CXX_COMPILER="g++" -DCMAKE_MAKE_PROGRAM="mingw32-make.exe" CMakeLists.txt -G "MinGW Makefiles"
这会产生与上一次尝试相同的错误:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_C_COMPILER:
gcc
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:10 (project):
The CMAKE_CXX_COMPILER:
g++
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "C:/git/tdd/googletest/CMakeFiles/CMakeOutput.log".
See also "C:/git/tdd/googletest/CMakeFiles/CMakeError.log".
但是,我可以调用g++
:
C:\git\tdd\googletest>g++
g++: fatal error: no input files
compilation terminated.
再次感谢!
好的,我设法使用 CMDER 的 Bash 控制台编译了它。假设您在 C:\mingw-w64\
(路径中没有空格)安装了 Mingw-w64,这些步骤将使您在 Mingw-w64[下得到一个工作的 Google 测试库
- 将路径设置为:
PATH=/c/Program\ Files/CMake/bin:/c/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin:$PATH
- 使用 调用 CMake
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_MAKE_PROGRAM=mingw32-make.exe CMakeLists.txt -G 'MSYS Makefiles'
- 构建方式
mingw32-make.exe -j8
我要冒昧地说这可能适用于 Git Bash shell。我仍然没有使用常规 Windows CMD 终端构建它的解决方案。
您最初的问题源于选择对 MSYS2 使用 make.exe 连同 MinGW-w64 编译器,make.exe 版本不支持。与 MinGW-w64 一起使用的正确程序是 mingw32-make.exe,它是 MinGW-w64 发行版的一部分。我不能完全理解你后来的编辑,但是例如这在 cmd.exe:
中非常有效set "PATH=C:\Program Files\CMake\bin;%PATH%"
set "PATH=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH%"
cmake ^
-G "MinGW Makefiles" ^
-D CMAKE_C_COMPILER=gcc.exe ^
-D CMAKE_CXX_COMPILER=g++.exe ^
-D CMAKE_MAKE_PROGRAM=mingw32-make.exe ^
.
mingw32-make.exe
这里,我使用了:
- CMake 3.15.2,
- MinGW-w64 8.1.0 (x86_64-8.1.0-posix-seh-rt_v6-rev0),
- 和 Google 测试的当前 git 版本。