Gradle - Visual C++ 编译器、vcpkg 和外部库
Gradle - Visual C++ compiler, vcpkg and external libraries
我安装了 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
) 的 header 包含到我的代码中时出现了问题。当使用 gradle 和 cpp-application 插件进行编译时,似乎看不到预先使用 vcpkg 安装的依赖项(当我使用 Visual Studio [=37] 编译代码时,一切都没有任何额外的配置=]).如何解决这个问题,最好不要 hard-coding 库和 header 进入我的 build.gradle
?
我能够 gradle 编译我的项目,方法是为它提供 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 []
}
}
我安装了 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
) 的 header 包含到我的代码中时出现了问题。当使用 gradle 和 cpp-application 插件进行编译时,似乎看不到预先使用 vcpkg 安装的依赖项(当我使用 Visual Studio [=37] 编译代码时,一切都没有任何额外的配置=]).如何解决这个问题,最好不要 hard-coding 库和 header 进入我的 build.gradle
?
我能够 gradle 编译我的项目,方法是为它提供 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 []
}
}