如何配置CmakeList以使用Windows命令行编译器而不是Visual Studio

如何配置CmakeList以使用Windows命令行编译器而不是Visual Studio,windows,visual-studio,gcc,makefile,cmake,Windows,Visual Studio,Gcc,Makefile,Cmake,我想将我的项目从VisualStudio解决方案转换为使用CMake构建并使用Makefiles编译 这是一个由两部分组成的问题 现在,CMakeLists.txt是: cmake_minimum_required(VERSION 3.13.0) project(Project2015 CXX) add_executable(Project Source/main.cpp) 当我在build目录外运行cmake..时,它会生成*.vcxproj和*.sln文件,但没有Makefile。如

我想将我的项目从VisualStudio解决方案转换为使用CMake构建并使用Makefiles编译

这是一个由两部分组成的问题

  • 现在,CMakeLists.txt是:

    cmake_minimum_required(VERSION 3.13.0)
    
    project(Project2015 CXX)
    
    add_executable(Project Source/main.cpp)
    
  • 当我在build目录外运行
    cmake..
    时,它会生成*.vcxproj和*.sln文件,但没有Makefile。如何更改CMakeLists文件以生成Makefile

  • windows的命令行编译器与gcc的等价物是什么?如何将这个编译器设置为CMake和生成的Makefile的目标? 阅读构建工具 是否需要针对
    cl.exe
    编译器?这是否适用于CMake和Makefiles? 我在网上读到,这些命令行标志将设置编译器,如何将它们添加到CMakeLists.txt以自动使用

    DCMAKE_C_COMPILER=cl 
    DCMAKE_C_COMPILER_FORCED=ON 
    DCMAKE_CXX_COMPILER=cl 
    DCMAKE_CXX_COMPILER_FORCED=ON 
    DCMAKE_BUILD_TYPE=Debug 
    DCMAKE_INSTALL_PREFIX=%CFITSIO_DIR% 
    G"NMake Makefiles"
    

  • 您应该使用CMake的构建工具模式从命令行进行构建

    使用Visual Studio 2019为64位生成配置项目后,例如

    cmake -S <sourcedir> -B <builddir> -G "Visual Studio 16 2019" -A x64 
    
    cmake-S-B-G“Visual Studio 16 2019”-A x64
    
    你会跑吗

    cmake --build <builddir> --target ALL_BUILD --config Release
    
    cmake--build--target ALL_build--config Release
    

    有关更多选项,请参见从命令行获得几乎安静的构建。请参见。

    正如@vre所建议的,您可以从命令行运行所有内容,同时仍使用Visual Studio生成器。只需使用CMake的命令行构建工具:

    cmake ..
    cmake --build . --config Release
    
    这样,您根本不必打开VisualStudio来构建库/可执行文件

    另一个选项是使用Microsoft的
    nmake
    实用程序,它将生成nmake生成文件。您可以告诉CMake使用此生成器,而不是使用此生成器:

    cmake -G"NMake Makefiles" ..
    
    将列出您可以从中选择的CMake生成器的完整列表

    如果不想在命令行中手动设置CMake生成器,可以在CMakeLists.txt文件的顶部进行设置:

    set (CMAKE_GENERATOR "NMake Makefiles" CACHE INTERNAL "" FORCE)
    

    在这种情况下,它将用于第二个CMake配置,因为第一次运行将使用系统默认生成器。如果您想让CMake在第一次配置中使用它,您可以使用本文概述的
    Preload.CMake
    过程。

    您需要下载并安装MinGW或类似的Windows版本,并告诉CMake使用它而不是Visual Studio。我不想为Linux构建项目,我只想通过命令行构建,而不必加载VisualStudio。MinGW用于构建本机Linux应用程序。不幸的是,链接没有帮助。必须有一个用于windows的命令行编译器,我应该能够以CMAKEY为目标。你会问:“我如何更改CMakeLists以生成生成文件?”。。。Visual Studio不使用Makefiles。请参阅CMake文档中的CMake generators.FWIW命令行列表,您仍然可以使用Visual Studio并在命令行上执行整个CMake配置和编译。这是最终目标吗?你问题的第二部分实际上是同时问几个问题。例如,最后一个问题(生成器)在那里得到回答:,关于构建类型的问题在这里得到回答(以及其他一些地方),等等。这就是为什么在堆栈溢出上,我们更喜欢每个问题一个问题的帖子。