使用CMake通过Git子模块引入jwt-cpp库失败,头文件未找到
解决jwt-cpp头文件找不到的编译错误
问题根源
你写的CMake配置里用了INTERFACE关键字设置头文件目录和链接库,但INTERFACE是给依赖当前目标的其他项目用的,你的Trial是需要直接编译的可执行文件,根本吃不到这个配置,所以编译器找不到头文件。另外,你已经通过add_subdirectory引入了子模块,后面的find_package分支完全多余,反而可能干扰配置。
修改后的CMakeLists.txt
直接替换原有配置即可:
cmake_minimum_required(VERSION 3.24.2) set(This Trial) project(${This} C CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(Sources main.cpp) add_executable(${This} ${Sources}) # 引入jwt-cpp子模块 add_subdirectory(External/jwt) # 给当前可执行文件添加头文件搜索路径(用PRIVATE,因为只有自身需要) target_include_directories(${This} PRIVATE External/jwt/include) # 链接jwt-cpp库到可执行文件 target_link_libraries(${This} PRIVATE jwt-cpp::jwt-cpp)
额外检查步骤
- 确保子模块拉取完整:执行
git submodule update --init --recursive,jwt-cpp依赖的fmt库默认用子模块管理,必须拉取完整才能正常编译 - 清空旧构建文件重新编译:
rm -rf build/* cd build cmake .. make
这样修改后,编译器就能正确找到jwt-cpp的头文件,编译即可正常完成。
内容的提问来源于stack exchange,提问作者Rusty
相关产品推荐
相关产品推荐

