我正在开发一个跨平台游戏项目。在 Macintosh 上进行开发后,我现在正致力于在 Windows 上构建它。在 Windows 上克隆存储库后,我进入该文件夹并从 CMake 工具扩展中执行“选择工具包”,然后选择 Visual Studio。很快我意识到我不喜欢这个选择,因为它对文件上的 Macintosh 行结尾很挑剔– 当你进行跨平台工作时,这是一个非常糟糕的安排,所以我回去选择了一个不同的工具包,使用我随 MSYS2 安装的 gcc。
有些不对劲。这是我的 CMake 配置的输出:
[main] Configuring project: Drawbox
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=C:\msys64\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\msys64\mingw64\bin\g++.exe --no-warn-unused-cli -SC:/Users/ken/Desktop/Drawbox -Bc:/Users/ken/Desktop/Drawbox/build -G "Visual Studio 17 2022"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.22631.
[cmake] -- DRAWBOX=C:/Users/ken/Desktop/Drawbox/Library/SpaceCalc.cppC:/Users/ken/Desktop/Drawbox/Library/Color.cppC:/Users/ken/Desktop/Drawbox/Library/FinePoint.cppC:/Users/ken/Desktop/Drawbox/Library/DrawboxWindow.cppC:/Users/ken/Desktop/Drawbox/Library/DrErrMessages.cppC:/Users/ken/Desktop/Drawbox/Library/DrEventQ.cppC:/Users/ken/Desktop/Drawbox/Library/Image.cppC:/Users/ken/Desktop/Drawbox/Library/PVector.cppC:/Users/ken/Desktop/Drawbox/Library/Point.cppC:/Users/ken/Desktop/Drawbox/Library/Rect.cppC:/Users/ken/Desktop/Drawbox/Library/Timer.cppC:/Users/ken/Desktop/Drawbox/Library/Win/Drawbox.Win.cppC:/Users/ken/Desktop/Drawbox/Library/Win/Keyboard.Win.cpp
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.1s)
[cmake] -- Build files have been written to: C:/Users/ken/Desktop/Drawbox/build
看一下该命令行:它选择 GCC 作为编译器,但以 -G“Visual Studio 17 2022”结尾。这是一团糟,这是我实际编译时出现的一些混乱:
[build] CheckerCheckerBoardBoard.cpp
[build] C:\Users\ken\Desktop\Drawbox\Tools\GraphicUtil.h(1,1): warning C4335: Mac file format detected: please convert the source file to either DOS or UNIX format [C:\Users\ken\Desktop\Drawbox\build\TestProgram.vcxproj]
[build] (compiling source file '../Test/CheckerCheckerBoardBoard.cpp')
[build]
[build] C:\Users\ken\Desktop\Drawbox\APClass\apmatrix.h(2,1): error C1070: mismatched #if/#endif pair in file 'C:\Users\ken\Desktop\Drawbox\APClass\apmatrix.h' [C:\Users\ken\Desktop\Drawbox\build\TestProgram.vcxproj]
[build] (compiling source file '../Test/CheckerCheckerBoardBoard.cpp')
。 。 。 这些看起来确实像是来自 MSVC 而不是 gcc 的警告和错误!那么解决这个问题的最佳方法是什么?有没有办法删除我第一次选择Visual Studio时存储的信息,以便我选择GCC时从头开始?
Visual Studio 是生成器而不是编译器(就生成器而言,Windows 平台上的另一个选项是 Ninja)。在我看来,您在对 CMake 的调用中明确将编译器设置为 gcc。我认为使用 Visual Studio 作为生成器,您需要将其设置为 Windows 的 c/c++ 编译器
cl.exe
。
(在我看来)使用
cmake
进行跨平台编译/构建的更好方法是使用 CMakePresests
。在这种情况下,您可以定义不同的预设并在操作系统上调节它们。例如,您的 linux
预设可以将 gcc
和 g++
设置为编译器,而您的 windows
预设可以将 cl.exe
设置为编译器。
您可以在此处阅读有关预设的内容cmake 预设。