【问题标题】:Unable to specify the compiler with CMake无法使用 CMake 指定编译器
【发布时间】:2012-10-14 19:15:08
【问题描述】:

我对这个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 -G "MinGW Makefiles" 调用 cmake,失败并显示以下输出:

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

【问题讨论】:

  • 我好久没接触Windows了,但是操作系统通常说C:\MinGW\bin\g++而不是你指定的,这是否困扰cmake?
  • 不,它不会打扰 CMake。无论操作系统如何,CMake 都使用“/”作为分隔符。在 Windows 上,我们会在必要时翻译为“\”。
  • 顺便说一句,因为这里的错误信息是“找不到”——也许你需要在文件名的末尾添加“.exe”?

标签: gcc cmake mingw


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 作者发的原问题没有得到解答。有时可能需要方法#3。假设您正在交叉编译。
  • 我认为原来的问题已经得到解答。如果发帖者尝试使用环境变量的方法,而不是在CMakeLists.txt文件中设置变量,我认为它会起作用,并且他不会得到错误。
  • 如果交叉编译可以在命令行设置CMAKE_TOOLCHAIN_FILEWiki link.
  • @DLRdave,CMake 3.10 有什么不同吗?因为这些都不适合我。即使我设置环境变量或使用 OP 方法,它也总是使用 MSVC。谢谢。
  • 我不知道 CMake 3.10 中的更改会改变此处讨论的任何内容。您是否从设置环境变量的同一环境中调用 CMake?或者您是单独设置它们并启动 CMake GUI?
【解决方案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。

之后它对我来说很好用

【讨论】:

  • 嘿 Junghyun,仅供参考 - 为已回答的问题添加新答案通常不是很有帮助,特别是如果您的答案是给定一般答案的更具体情况。干杯!
  • @Ben。当然是有帮助的。更多,即使是那种特殊情况!!
  • @hyprfrcb 想象这样一个世界,每个收到类似错误消息的人都添加了一个新答案,并在他们的机器上解决了 他们的 版本的错误消息。他们不会回答最初的问题,他们只是为相关但不同的问题提供解决方案。 (在这种情况下,新的答案有相同的错误,但它不是相同的问题。新的回答者没有安装 GCC,而原始用户设置的路径不正确)。如果每个人都这样做,那么每个问题都会产生很多无用的噪音
  • 我不知道你生活在哪个世界,但在现有答案中添加新信息并不是“噪音”。
  • 这个答案实际上救了我的@$$。太棒了正铉!
【解决方案3】:

使用FILEPATH 选项可能有效:

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

【讨论】:

    【解决方案4】:

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

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

    应该是

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

    这同样适用于 g++。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 2017-01-19
      • 2012-10-14
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多