target_include_directories作用域应据用途选:内部头用private,对外头用public,header-only库用interface;路径须用${cmake_current_source_dir}拼接,避免硬编码;命令需在add_*后、target_link_libraries前,且目标名严格一致。

target_include_directories 作用域选 PRIVATE 还是 PUBLIC?
选错作用域是头文件“时而能用、时而报错”的主因。PRIVATE 表示路径只供目标自身源码 #include,不向外传递;PUBLIC 表示该目标自己用,且链接它的其他目标也能用——比如你写了个库 mylib,头文件放在 include/ 下,外部可执行程序要 #include "mylib.h",就必须用 PUBLIC,否则编译器在构建可执行程序时根本看不到那个路径。
INTERFACE 适合 header-only 库或生成头文件的场景,自身不编译,只影响依赖方。常见误操作:把库的公开头目录设成 PRIVATE,结果调用方一编译就报 “no such file or directory”。
- 库目标自身实现文件需要头文件 → 用
PRIVATE指向内部头路径(如src/internal) - 库对外暴露的头文件路径 → 必须用
PUBLIC指向include/ - 生成的头文件(如
config.h)只供使用者包含 → 用INTERFACE配合$<...></...>
访问全球海洋潮汐模型。功能包括查询指定日期、时间和地点的潮高、潮汐极值及格点天气数据。










