spdlog新版本提供了静态库方式,这样比原来的header only方式显著提升了编译速度。
这里分析一下怎么使用: 根目录下的CMakeLists.txt中主要有如下内容:
...
include(cmake/ide.cmake) // 其中包含SPDLOG_ALL_HEADERS等变量
...
add_library(spdlog STATIC src/spdlog.cpp ${SPDLOG_ALL_HEADERS}) // 添加静态库编译对象
add_library(spdlog::spdlog ALIAS spdlog) // 别名
...
target_compile_definitions(spdlog PUBLIC SPDLOG_COMPILED_LIB) // 在对象中添加宏定义
...
find_package(Threads REQUIRED)
...
target_link_libraries(spdlog_header_only INTERFACE Threads::Threads)
add_subdirectory(example) // 添加了子目录example
example目录下的CMakeLists.txt主要内容:
add_executable(example example.cpp)
target_link_libraries(example PRIVATE spdlog::spdlog) // 依赖了spdlog::spdlog,即spdlog,即静态库
example有两种编译方式:
- 一种是通过根目录的CMakeLists.txt引用example下的CMakeLists.txt可以编译
- 另一种是通过命令编译:
g++ example.cpp ../src/spdlog.cpp -I../include -L.. -DSPDLOG_COMPILED_LIB -pthread