Cmake 在windows下生成Unix Makefile, 也可以生成Visual Studio slnvcxproj

it2022-05-05  168

需要解决的问题

使用cmake时遇到一个问题: 在unix环境下, cmake默认的generator 是Unix Makefile, build目录下就有产生Makefile. 在windows里用cmake时, 默认使用的是Visual Studio 15 2017. 然后生成的都是些sln, vcxproj. 这就导致我在windows如果使用mingw这种模拟unix环境的工具去build文件下里进行make,就不可能了. 所以希望cmake 能够按照我的要求在windows里生成unix那种makefile, 然后在mingw里用mingw32-make. 或者生成vs的sln和vcxproj, 然后通过msbuild来生成exe文件.

Unix Makefile

一开始不知道cmake还有generator这一说, (以为只有compiler设置), 直到打开cmake gui, 发现还能选generator. 命令行里cmake -G 也可以打印出所有generator. 所以指定makefile generator需要这样写 默认在build目录里

cmake .. -G ""Unix Makefiles"

出来的就是unix里看到的makefile文件了. 之后再make就看到可执行文件了. 如果想省力气默认设置generator, 需要在CMakeLists.txt的同一级创建一个PreLoad.cmake:

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

在这之后cmake … 就直接是Unix Makefiles 形式了

Visual Studio

其实默认的generator是Visual Studio 15 2017 Win32 (如果装了VS的话) 出来的sln, vcxproj 还得用VS去打开vcxproj, 然后运行. 我有时不想这样, 想直接build, 然后运行exe. 这就需要调用msbuild. 找了半天, 在这里找到对应的prompt的快捷方式, 每个prompt对应cmake时不同的配置, 注意x86/x64和Native/Cross 要选对, 不然用MSBuild.exe xxx.sln 会有问题. 我就想在MingW 里直接msbuild, 结果找不到命令, MSBuild.exe也不行. 原来是要把 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin 加入环境变量里, 然后才能调用MSBuild.exe, 这能应付Win32/Win64 的sln.

如果你不想安装VS 或者没有找到MSBuild

如果你不想安装VS 但是需要MSBuild, 或者你装了Visual Studio, 还是没找到MSBuild 可以参考这篇文章https://developer.valvesoftware.com/wiki/Building_without_Visual_Studio#Step_1:_MSBuild.exe 解决方法就是要装个独立的MSBuild (Build Tools for Visual Studio 2017) 和.NET framework.


最新回复(0)