Gradle-Visual C ++编译器,vcpkg和外部库

时间:2019-08-05 19:39:29

标签: c++ visual-studio gradle vcpkg

我在vcpkg旁边安装了Visual Studio 2019。我已经安装了一个外部依赖项(使用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中加入硬编码库和标头?

1 个答案:

答案 0 :(得分:0)

通过向其提供vcpgk安装的mpi标头和库的路径,我能够获得编译我的项目的机会。我将寻找一种使其更灵活的方法。不过,这是我对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 []
    }
}