【发布时间】:2019-10-07 07:53:42
【问题描述】:
我试图让 CMAKE 在运行时使用特定的编译器。具体来说,我希望它使用本地安装的 GCC 编译器。但是当我尝试设置 CMAKE_C_COMPILER 变量时,它似乎失败了。
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
cmake_minimum_required(VERSION 3.10)
PROJECT(hello C)
add_executable(hello hello.c)
使用工具链更新
我尝试使用以下工具链文件使其工作,但它仍然选择 Visual Studio 构建工具。
# Toolchain File
# The target of this operating systems is
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER gcc)
SET(CMAKE_CXX_COMPILER g++)
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH C:/MyPrograms/MinGW/bin/ )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
关于问题的更多更新
当我查看使用工具链文件时创建的缓存文件时,我发现了一些有趣的东西。它试图指向正确的编译器,但它仍在使用 Visual Studio 生成器......
//Name of generator.
CMAKE_GENERATOR:INTERNAL=Visual Studio 15 2017
//Generator instance identifier.
CMAKE_GENERATOR_INSTANCE:INTERNAL=C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/
这里的生成器怎么处理?
【问题讨论】:
-
"但是当我尝试设置 CMAKE_C_COMPILER 变量时,它似乎失败了。" - 请显示您收到的错误消息。简单的“似乎失败”并不能很好地描述 Stack Overflow 上的问题。
-
应用程序。它确实可以运行,但它使用了 Visual Studio 工具链。我希望它使用 gcc 编译器。
-
@Tsyvarev 你有什么意见吗?无论我在我的工具链文件中放了什么,我似乎都无法让它停止将 CMAKE_GENERATOR_INSTANCE 设置为 Visual Studio 构建工具。即使我在工具链文件中设置它以使用
set(CMAKE_GENERATOR_INSTANCE "" CACHE INTERNAL "" FORCE)擦除内部缓存 -
闻起来你对 CMake generator(可能是 Visual Studio、MinGW、Makefile、Ninja 等)和 compiler 感到困惑,后者可以是 gcc、llvm、cl。这些是独立的东西。如果要更改编译器,请在
CMakeLists.txt或工具链文件中设置CMAKE_C_COMPILER。如果您想更改generator,请将适当的-G选项传递给cmake。 (我知道,Visual Studio 附带的cl编译器可以与其他生成器一起使用。但我不确定 Visual Studio 是否可以与gcc一起使用。) -
@Tsyvarev 我认为您可以使用以下命令在工具链中指定 generator
set(CMAKE_GENERATOR "MinGW Makefiles" CACHE INTERNAL "" FORCE )。为什么这不起作用?
标签: c windows gcc cmake windows-10