引言本文主要介绍如何在Qt6 CMake 项目中直接引用第三方库编译发布文件头文件、.lib/.a 导入库、.dll/.so 动态库而不通过源码编译的方式。假设第三方库 mylib 的文件结构如下C:/dev/mylib/├── include/│ └── mylib.h ├── lib/│ ├── mylib.lib(Windows 导入库)│ └── mylib.a(Linux 静态/导入库)└── bin/(可选)└── mylib.dll(Windows 运行时)CMakeLists.txt 配置示例#1.定义库的根路径方便管理set(MYLIB_ROOTC:/dev/mylib)#2.添加头文件搜索路径target_include_directories(MyApp PRIVATE ${MYLIB_ROOT}/include)#3.添加库文件搜索路径target_link_directories(MyApp PRIVATE ${MYLIB_ROOT}/lib)#4.链接库文件不需要写全路径只需要库名target_link_libraries(MyApp PRIVATE mylib # 在 Windows 上会找 mylib.libLinux 上会找 libmylib.a)重要细节1、导入库 vs 动态库在 Windows 上编译动态库会生成两个文件mylib.dll —— 运行时需要动态库mylib.lib —— 编译链接时使用导入库target_link_libraries() 链接的是 .lib 导入库而不是 .dll。在 Linux 上动态库是 libmylib.so链接时直接使用 .so 文件。2、运行时确保能找到 .dll / .soWindows把 .dll 文件复制到你的可执行文件.exe所在的输出目录。Linux设置环境变量 LD_LIBRARY_PATH 包含 .so 所在目录或者也复制到可执行文件同目录。完整示例假设你在 Windows 上第三方库放在 D:/libs/mylib源码如下CMakeLists.txtcmake_minimum_required(VERSION3.16)project(MyApp)find_package(Qt6 REQUIRED COMPONENTS Core Widgets)set(MYLIB_ROOTD:/libs/mylib)qt_add_executable(MyApp main.cpp mainwindow.cpp)# 添加头文件路径target_include_directories(MyApp PRIVATE ${MYLIB_ROOT}/include)# 添加库路径target_link_directories(MyApp PRIVATE ${MYLIB_ROOT}/lib)# 链接库target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Widgets mylib)# 自动复制 DLL 到输出目录仅 Windowsif(WIN32)add_custom_command(TARGET MyApp POST_BUILD COMMAND ${CMAKE_COMMAND}-E copy_if_different ${MYLIB_ROOT}/bin/mylib.dll $TARGET_FILE_DIR:MyApp)endif()总结步骤关键命令指定头文件路径target_include_directories(… PRIVATE 路径)指定库文件路径target_link_directories(… PRIVATE 路径)链接库target_link_libraries(… 库名)运行时找 DLL复制到 .exe 同目录 或 设置环境变量这种方式不依赖源码完全基于已编译好的库文件适用于你想固定使用某个特定版本库的场景。