35 lines
1.5 KiB
CMake
35 lines
1.5 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
||
project(visibility_demo CXX)
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
|
||
# ============ color ============
|
||
add_library(color
|
||
color/src/color.cpp
|
||
color/src/rgb_convert.cpp
|
||
)
|
||
target_include_directories(color
|
||
PUBLIC color/public # 对外头目录:用户由此 #include <color/color.h>
|
||
PRIVATE color/include # 内部头目录:rgb_convert.h 只有 color 自己可见
|
||
)
|
||
# 宏出现在公开头文件的 #ifdef 里,决定 API 形状。
|
||
# 若只标 PRIVATE:color.cpp 编译出了 brightColorCode,
|
||
# 但用户看到的头文件里该声明被预处理掉 → 库和用户对 API 的理解不一致。
|
||
target_compile_definitions(color PUBLIC COLOR_ENABLE_BRIGHT)
|
||
|
||
# ============ timeutil ============
|
||
add_library(timeutil timeutil/timeutil.cpp)
|
||
target_include_directories(timeutil PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/timeutil)
|
||
|
||
# ============ printer ============
|
||
add_library(printer printer/src/printer.cpp)
|
||
target_include_directories(printer PUBLIC printer/public)
|
||
target_link_libraries(printer
|
||
PUBLIC color # printer.h 引用了 color/color.h → 契约的一部分
|
||
PRIVATE timeutil # 只有 printer.cpp 用 → 实现细节
|
||
)
|
||
# 时间格式只影响 printer.cpp 的编译 → PRIVATE,不泄漏、改格式不触发下游重编
|
||
target_compile_definitions(printer PRIVATE "PRINTER_TIME_FORMAT=\"%H:%M:%S\"")
|
||
|
||
# ============ app ============
|
||
add_executable(app app/main.cpp)
|
||
target_link_libraries(app PRIVATE printer)
|