examples/cmake/visibility/CMakeLists.txt

35 lines
1.5 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 形状。
# 若只标 PRIVATEcolor.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)