c++ - Gradle - Visual C++ 编译器、vcpkg 和外部库
问题描述
我在 vcpkg 旁边安装了 Visual Studio 2019。我已经安装了一个外部依赖项(使用 msmpi vcpkg install msmpi:x86-windows
)并尝试使用 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
?
解决方案
通过为项目提供 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 []
}
}
推荐阅读
- android - android:descendantFocusability="afterDescendants" 更改布局(似乎滚动)
- eclipse - 如果 module-info.java 存在,Eclipse 2018-09 找不到测试类
- javascript - 实时服务器上的间歇性 AJAX 错误
- react-native - React Native 如何拥有沉浸式模态
- javascript - 不使用 jQuery 发送不和谐 webhook
- amazon-web-services - Elasticsearch:集群上的 503 错误 - 未发现主服务器
- rhapsody - IBM Rhapsody:如何使用另一个块的值?
- reactjs - css-loader 在导入 css 文件时返回 undefined
- java - IntelliJ IDEA Community Edition 2018.3 的 build.gradle 异常
- azure-sql-database - New-AzureRmSqlDatabaseImport 不接受大于 5GB 的 DatabaseMaxSizeBytes