【问题标题】:Gradle - Visual C++ compiler, vcpkg and external librariesGradle - Visual C++ 编译器、vcpkg 和外部库
【发布时间】:2019-08-12 21:01:53
【问题描述】:

我安装了 Visual Studio 2019 以及 vcpkg。我已经安装了一个外部依赖项(使用 vcpkg install msmpi:x86-windows 的 msmpi)并尝试使用 Visual Studio IDE 创建示例 MPI 项目:一切正常,无需额外配置,令人印象深刻。

现在 - 由于我正在处理的项目的性质,我想使用 gradle 来编译我的代码(在 Visual Studio 之外)。为了实现这一点,我使用了 Gradle 的 cpp-application 插件,并带有以下 build.gradle:

plugins {
    id 'cpp-application'
}

简单的“Hello world”的编译工作:gradle 找到 Visual C++ 编译器,执行它,一切顺利(顺便说一句,我也印象深刻)。

当我将来自外部库 (mpi.h) 的标头包含到我的代码中时,问题就出现了。当使用 gradle 和 cpp-application 插件进行编译时,使用 vcpkg 预先安装的依赖项似乎不可见(当我使用 Visual Studio IDE 编译代码时,一切都在没有任何额外配置的情况下工作)。如何解决问题,最好不要将库和标题硬编码到我的build.gradle

【问题讨论】:

    标签: c++ visual-studio gradle vcpkg


    【解决方案1】:

    通过为项目提供 vcpgk 安装的 mpi 头文件和库的路径,我能够获得 gradle 来编译我的项目。我将寻找一种使其更灵活的方法。不过,这是我对build.gradle 的补充:

    ext {
        vcpgkIncludePath = 'path-to-include'
        vcpkgLibPath = 'path-to-vcpkg-libs'
    }
    tasks.withType(CppCompile).configureEach {
        compilerArgs.addAll toolChain.map { toolChain ->
            if (toolChain in VisualCpp) {
                return ["/I$vcpgkIncludePath"]
            }
            return []
        }
    }
    
    tasks.withType(org.gradle.nativeplatform.tasks.LinkExecutable).configureEach {
        linkerArgs.addAll toolChain.map { toolChain ->
            if (toolChain in VisualCpp) {
                return ["/LIBPATH:$vcpkgLibPath", "msmpi.lib"]
            }
            return []
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2022-10-23
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多