如何配置CmakeList以使用Windows命令行编译器而不是Visual Studio
我想将我的项目从VisualStudio解决方案转换为使用CMake构建并使用Makefiles编译 这是一个由两部分组成的问题如何配置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。如
cmake_minimum_required(VERSION 3.13.0)
project(Project2015 CXX)
add_executable(Project Source/main.cpp)
cmake..
时,它会生成*.vcxproj和*.sln文件,但没有Makefile。如何更改CMakeLists文件以生成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配置和编译。这是最终目标吗?你问题的第二部分实际上是同时问几个问题。例如,最后一个问题(生成器)在那里得到回答:,关于构建类型的问题在这里得到回答(以及其他一些地方),等等。这就是为什么在堆栈溢出上,我们更喜欢每个问题一个问题的帖子。