【问题标题】:Compile CMake based project with minGW使用 minGW 编译基于 CMake 的项目
【发布时间】:2017-09-10 20:12:45
【问题描述】:

我想在使用 MinGW (MSYS2) 编译的 Windows 项目中使用 SignalR。据我所知,我无法链接到用另一个编译器(即 VC++)编译的库(dll)。

因此,我需要用 MinGW 编译 SignalR。 这里是存储库:

https://github.com/aspnet/SignalR-Client-Cpp

该项目基于 CMake 而不是标准的 Makefile。 这就是我所做的:

尝试按照此处所述编译 Cpp Rest SDK:

https://github.com/Microsoft/cpprestsdk/wiki/How-to-build-for-Linux

导致这个输出:

$ cmake .. -DCMAKE_BUILD_TYPE=发布 -- 为:Visual Studio 15 2017 构建 -- C 编译器标识为 MSVC 19.10.25019.0 -- CXX 编译器标识为 MSVC 19.10.25019.0 -- 检查工作的 C 编译器:C:/Program Files/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x86/cl.exe -- 检查工作的 C 编译器:C:/Program Files/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x86/cl.exe -- 有效

恐怕它仍在使用 MSVC 编译器,因此输出二进制文件与我的应用程序不兼容。

我应该如何编译这些库?

【问题讨论】:

  • cmake 具有 CC 和 CXX 环境变量(至少在 linux 上)。你应该把这些改成你的mingw。也应该有允许这样做的命令行标志。否则请参阅ccmake(同样在 linux 中,但也可能在 windows 中),它允许您更改许多变量和标志等。必要时进入高级模式

标签: c++ visual-c++ makefile cmake


【解决方案1】:

我不熟悉 mingw 工具链,但在 cygwin 中它包含自己的 cmake 构建,您可以使用它为您的库生成构建系统。您正在使用将检测 Visual Studio 的预编译 Windows 二进制文件。

如果 mingw 不包含预构建的 cmake,我将下载源代码并在 mingw 中编译它,然后使用该 cmake 二进制文件生成 SignalR 的构建系统。

下载地址:http://www.cmake.org/download/ 并通过以下方式构建它:

    ./bootstrap
    make      
    make install

【讨论】:

    【解决方案2】:

    CMake 本身不会构建任何东西。相反,它会为 make、MSBuild、Ninja 等生成配置文件。每个平台都有其默认生成器。对于 Windows,即 Visual Studio/NMake。

    您可以使用CMake’s -G option 手动选择生成器。一些生成器名称包含空格。确保在它们周围加上引号。

    【讨论】:

    • CMake 确实构建了一个测试程序,看看它是否可以测试给定的编译器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多