无法使用 CMake 指定编译器
Posted
技术标签:
【中文标题】无法使用 CMake 指定编译器【英文标题】:Unable to specify the compiler with 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?
I thought the same
不,它不会打扰 CMake。无论操作系统如何,CMake 都使用“/”作为分隔符。在 Windows 上,我们会在必要时翻译为“\”。
顺便说一句,因为这里的错误信息是“找不到”——也许你需要在文件名的末尾添加“.exe”?
【参考方案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 之前设置环境变量 CC
和 CXX
。
CMake 检测到要使用的编译器后,会将它们保存在 CMakeCache.txt
文件中,这样即使这些变量从环境中消失,它仍然可以生成正确的构建系统...
如果您需要更改编译器,则需要从新的构建树开始。
【讨论】:
作者发的原问题没有得到解答。有时可能需要方法#3。假设您正在交叉编译。 我认为原来的问题已经得到解答。如果发帖者尝试使用环境变量的方法,而不是在CMakeLists.txt文件中设置变量,我认为它会起作用,并且他不会得到错误。 如果交叉编译可以在命令行设置CMAKE_TOOLCHAIN_FILE
。 Wiki 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++。
【讨论】:
以上是关于无法使用 CMake 指定编译器的主要内容,如果未能解决你的问题,请参考以下文章
为啥 cl.exe(Visual Studio 编译器)无法使用 CMake(错误报告)编译项目?
使用 CMake 编译后无法从 mpich2 使用 mpirun