49

我有这个CMakeLists.txt文件的问题:

cmake_minimum_required(VERSION 2.6)

SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc)
SET(CMAKE_CXX_COMPILER C:/MinGW/bin/g++)

project(cmake_test)

add_executable(a.exe test.cpp)

用: 调用 cmakecmake -G "MinGW Makefiles"失败,输出如下:

c:\Users\pietro.mele\projects\tests\buildSystem_test\cmake_test>cmake -G "MinGW Makefiles" .
-- The C compiler identification is GNU 4.6.1
-- The CXX compiler identification is GNU 4.6.1
-- Check for working C compiler: C:/MinGW/bin/gcc
CMake Error: your C compiler: "C:/MinGW/bin/gcc" was not found.   Please set CMAKE_C_COMPILER to a valid compiler path or name.
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Check for working C compiler: C:/MinGW/bin/gcc -- broken
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
  The C compiler "C:/MinGW/bin/gcc" is not able to compile a simple test
  program.

CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:10 (project)

CMake Error: your C compiler: "C:/MinGW/bin/gcc" was not found.   Please set CMAKE_C_COMPILER to a valid compiler path or name.
CMake Error: your CXX compiler: "C:/MinGW/bin/g++" was not found.   Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
-- Configuring incomplete, errors occurred!

但是gcc编译器在C:/MinGW/bin/里面并且可以工作。

任何想法?

平台:

  • Windows 7的
  • MinGW/GCC 4.6
4

4 回答 4

76

切勿尝试在CMakeLists.txt文件中设置编译器。

请参阅 CMake 常见问题解答,了解如何使用不同的编译器:

https://gitlab.kitware.com/cmake/community/wikis/FAQ#how-do-i-use-a-different-compiler

(请注意,您正在尝试方法#3,并且常见问题解答说“(避免)”......)

我们建议避免使用“in the CMakeLists”技术,因为当第一次配置使用不同的编译器时,它会出现问题,然后 CMakeLists 文件会更改以尝试设置不同的编译器......而且因为 CMakeLists 文件的意图根据运行 CMake 的开发人员的偏好,应该使用多个编译器。

最好的方法是在构建树中第一次调用 CMake 之前设置环境CC变量CXX

在 CMake 检测到要使用的编译器后,它将它们保存在CMakeCache.txt文件中,以便即使这些变量从环境中消失,它仍然可以生成正确的构建系统......

如果您需要更改编译器,则需要从新的构建树开始。

于 2012-10-26T15:17:32.967 回答
7

我和 Pietro 有类似的问题,

我在 Window 10 上并使用“Git Bash”。我试图执行 >>cmake -G "MinGW Makefiles",但我得到了与 Pietro 相同的错误。

然后,我尝试了 >>cmake -G "MSYS Makefiles",但意识到我需要正确设置我的环境。

确保将路径设置为 C:\MinGW\msys\1.0\bin 并检查那里是否有 gcc.exe。如果 gcc.exe 不存在,那么您必须运行 C:/MinGW/bin/mingw-get.exe 并从 MSYS 安装 gcc。

之后它对我来说很好

于 2017-08-08T22:56:18.583 回答
4

使用 withFILEPATH选项可能有效:

set(CMAKE_CXX_COMPILER:FILEPATH C:/MinGW/bin/gcc.exe)
于 2018-12-31T10:00:52.427 回答
2

我遇到过同样的问题。就我而言,修复非常简单。诀窍是简单地将“.exe”添加到您的编译器路径中。所以,而不是:

SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc)

它应该是

SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc.exe)

这同样适用于 g++。

于 2018-02-27T22:19:19.787 回答