无法使用 CMake 指定编译器

Unable to specify the compiler with CMake

提问人:Pietro 提问时间:10/25/2012 最后编辑:jwwPietro 更新时间:9/5/2019 访问量:136937

问:

我对此文件有疑问: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)

使用以下命令调用 cmake: 失败,并显示以下输出:cmake -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!

但是,编译器已进入并且可以工作。gccC:/MinGW/bin/

有什么想法吗?

平台:

  • 视窗 7
  • MinGW/GCC 4.6
GCC CMake mingw

评论

0赞 Benjamin Bannier 10/25/2012
我已经很久没有碰过 Windows,但是操作系统通常会说而不是您指定的内容,这是否打扰了 cmake?C:\MinGW\bin\g++
0赞 Pietro 10/25/2012
我也是这么想的
1赞 DLRdave 10/26/2012
不,它不会打扰 CMake。CMake 使用“/”作为分隔符,无论操作系统如何。在 Windows 上,我们会在必要时转换为“\”。
3赞 DLRdave 10/26/2012
顺便说一下,由于这里的错误消息是“未找到” - 也许您需要在文件名的末尾添加“.exe”?

答:

83赞 DLRdave 10/26/2012 #1

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

有关如何使用其他编译器的信息,请参阅 CMake 常见问题解答:

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

(请注意,您正在尝试方法#3,并且FAQ说“(避免)”...

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

最好的方法是在构建树中首次调用 CMake 之前设置环境变量。CCCXX

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

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

评论

3赞 leodotcloud 4/29/2015
作者发布的原始问题没有得到解答。有时可能需要方法#3。假设您正在交叉编译。
1赞 DLRdave 4/29/2015
我认为最初的问题已经得到了解答。如果发帖人尝试使用环境变量方法,而不是在 CMakeLists.txt 文件中设置变量,我认为它会起作用,并且他不会得到错误。
1赞 midrare 8/30/2015
如果是交叉编译,可以在命令行上设置。Wiki 链接。CMAKE_TOOLCHAIN_FILE
1赞 Royi 2/20/2018
@DLRdave,CMake 3.10 有什么不同吗?因为这些对我不起作用。即使我设置了环境变量或使用 OP 方法,它也始终使用 MSVC。谢谢。
0赞 DLRdave 2/21/2018
我不知道 CMake 3.10 中的更改会改变这里讨论的任何内容。是否从设置环境变量的同一环境中调用 CMake?或者您是单独设置它们并启动 CMake GUI?
7赞 junghyun jun 8/9/2017 #2

我和 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。

在那之后,它对我来说效果很好

评论

1赞 Ben M 8/9/2017
嘿 Junghyun,仅供参考 - 为已经回答的问题添加新答案通常不是很有帮助,特别是如果您的答案是给定一般答案的更具体情况。干杯!
5赞 Brethlosze 10/4/2017
@Ben。当然,这是有帮助的。更,即使是那个特定的情况!!
0赞 Ben M 10/10/2017
@hyprfrcb想象一个世界,每个有类似错误消息的人都只是添加了一个新答案,无论在他们的机器上解决了他们的错误消息版本。他们不会回答最初的问题,他们只是为一个相关但不同的问题提供解决方案。(在这种情况下,新答案具有相同的错误,但不是相同的问题。新应答者未安装 GCC,而原始用户设置路径不正确)。如果每个人都这样做,那么在每个问题上都会导致很多无益的噪音
7赞 Brethlosze 10/10/2017
我不知道你生活在哪个世界,但在现有答案中添加新信息并不是“噪音”。
1赞 AmirSojoodi 5/17/2020
这个答案实际上拯救了我的@$$。太棒了!
1赞 Joel 2/28/2018 #3

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

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

它应该是

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

这同样适用于 g++。

3赞 user4640261 12/31/2018 #4

使用 with 选项可能会起作用:FILEPATH

set(CMAKE_CXX_COMPILER:FILEPATH C:/MinGW/bin/gcc.exe)