计算机
c base
c++ 基础 作用域及生命周期
c++ template
c++ 内存视角
c++ 函数指针
c++ 基础 基础语法
c++ 多线程
c++ 性能
c++ 类 基础
c++ 类 对象模型 类析构
c++ 类 设计模式
cmake
CMAKE环境搭建 windows
创建第一个cmakelists.txt
构建稍复杂的项目
动态链接库
EX1
EX1 START
EX1 ANSWER
EX2
EX2 START
EX2 ANSWER
EX3
EX3 START
EX3 ANSWER
变量
控制流程
函数和宏
查找和使用外部库
生成器表达式
qt 开发环境
qt c++
理解QObject 1
理解QObject 4
qt index
qt qml quick
qt ui
qt 多线程
数据结构 数组
PC问题监控及排查
PC程序性能优化
OS
TOOL
C++ STL
编程漫谈
C++实战-生产者 消费者流水线
C++实战 IO
本站点使用 MrDoc 构建
-
+
动态链接库
## 项目结构 ``` linking-libraries/ ├── CMakeLists.txt # 主 CMake 配置 ├── main.cpp # 主程序 ├── libs/ # 库目录 │ ├── math/ # 数学库 │ │ ├── math_operations.h │ │ └── math_operations.cpp │ ├── string/ # 字符串库 │ │ ├── string_utils.h │ │ └── string_utils.cpp │ └── logger/ # 日志库 │ ├── logger.h │ └── logger.cpp └── README.md ``` ``` cmake_minimum_required(VERSION 3.15) project(LinkingLibraries VERSION 1.0) # 创建数学库 add_library(math_lib STATIC libs/math/math_operations.cpp ) target_include_directories(math_lib PUBLIC libs/math/) set(CMAKE_C_COMPILER "D:/msys64/mingw64/bin/gcc.exe") set(CMAKE_CXX_COMPILER "D:/msys64/mingw64/bin/g++.exe") # 创建字符串处理库 add_library(string_lib STATIC libs/string/string_utils.cpp ) target_include_directories(string_lib PUBLIC libs/string/) # 创建日志库 add_library(logger_lib STATIC libs/logger/logger.cpp ) # **作用**:告诉编译器在哪里查找 logger_lib 需要的头文件 # 使用 PUBLIC 意味着这个路径会传递给: # logger_lib 自己编译时(处理 logger.cpp) # 所有链接 logger_lib 的其他目标(如主程序) target_include_directories(logger_lib PUBLIC libs/logger/) # 创建可执行文件 add_executable(demo main.cpp) # 链接所有库到可执行文件 target_link_libraries(demo PRIVATE math_lib string_lib logger_lib ) # 设置 C++ 标准 set_property(TARGET math_lib PROPERTY CXX_STANDARD 17) set_property(TARGET string_lib PROPERTY CXX_STANDARD 17) set_property(TARGET logger_lib PROPERTY CXX_STANDARD 17) set_property(TARGET demo PROPERTY CXX_STANDARD 17) ``` ```c++ //main.cpp #include <iostream> #include "math_operations.h" #include "string_utils.h" #include "logger.h" int main() { logger::info("Starting multi-library demo"); // 使用数学库 std::cout << "\n=== Math Library Demo ===" << std::endl; int a = 15, b = 5; std::cout << a << " + " << b << " = " << math::add(a, b) << std::endl; std::cout << a << " * " << b << " = " << math::multiply(a, b) << std::endl; std::cout << "Average of " << a << " and " << b << " = " << math::average(a, b) << std::endl; // 使用字符串库 std::cout << "\n=== String Library Demo ===" << std::endl; std::string text = "Hello CMake"; std::cout << "Original: " << text << std::endl; std::cout << "Upper: " << string_utils::toUpper(text) << std::endl; std::cout << "Lower: " << string_utils::toLower(text) << std::endl; std::cout << "Reversed: " << string_utils::reverse(text) << std::endl; // 使用日志库 std::cout << "\n=== Logger Library Demo ===" << std::endl; logger::info("This is an info message"); logger::warning("This is a warning message"); logger::error("This is an error message"); logger::info("Demo completed successfully"); return 0; } ```  ## 构建和运行 ```bash # 配置 cmake -S . -B build -G "MinGW Makefiles" # 构建 cmake --build build # 运行 ./build/demo # Linux/macOS build\Debug\demo.exe # Windows ``` ## REF ``` //创建库文件 add_library(<name> [STATIC | SHARED | MODULE | OBJECT | INTERFACE] [EXCLUDE_FROM_ALL] [源文件列表...]) //target_include_directories 是 CMake 中用于指定编译特定目标(target)时所需的头文件搜索路径的命令。 target_include_directories(<target> <INTERFACE|PUBLIC|PRIVATE> <目录1> <目录2> ... ) ```
peipeo
2026年5月15日 22:58
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码