使用Gradle构建C++项目引入Boost库报头文件缺失错误如何解决
问题原因
你当前的报错是因为Gradle没有将Boost的头文件路径加入编译时的头文件搜索列表,核心是依赖配置的位置写错了。
修正后的完整配置
plugins { id 'cpp' id 'cpp-application' } model { // 配置C++标准为20,和你CMake配置对齐 cpp { sourceCompatibility = '20' } repositories { libs(PrebuiltLibraries) { boost { // 头文件路径配置无误直接保留 headers.srcDir "C:/CPlusPlus/vcpkg/installed/x64-windows/include" binaries.withType(StaticLibraryBinary) { // 当前测试用的是unit_test组件就保留该配置,后续用到serialization时替换为对应lib文件名即可 staticLibraryFile = file("C:/CPlusPlus/vcpkg/installed/x64-windows/lib/boost_unit_test_framework-vc140-mt.lib") } } } } platforms { x86 { architecture "x86" } x64 { architecture "x86_64" } } components { main(NativeExecutableSpec) { targetPlatform "x64" // 依赖要写在该层级,不要放在sources.cpp配置块内部 lib library: "boost", linkage: "static" sources { cpp { source { srcDirs "src/main/cpp", "src/shared/c++" include "**/*.cpp" } exportedHeaders { srcDirs "src/main/headers", "src/shared/headers" } } } } } } version = '1.2.1'
配置说明
- 调整了Boost依赖的配置层级,Gradle会自动在编译时添加对应的头文件搜索路径,链接阶段自动引入指定的静态库
- 新增了C++20标准配置,和你原有CMake配置的编译规则保持一致
- 后续切换到业务代码使用Boost.Serialization组件时,只需要修改
staticLibraryFile对应的静态库文件名即可,其余配置不需要调整
内容的提问来源于stack exchange,提问作者Maksym Halych
相关产品推荐
相关产品推荐

