搜索路径
在 Linux 平台上,CMake 本身不会自动扫描系统的所有头文件和库目录。只有在使用 find_package ()、find_library () 或 find_path () 等命令时,CMake 才会按编译器默认查找路径和 CMake 模块规则来查找。
1 2 3
| /usr/include /usr/local/include /usr/include/<arch-specific>
|
1 2 3
| /usr/lib /usr/local/lib /usr/lib/<arch-specific>
|
特别注意
- CMake 查找库时还会参考环境变量
LIBRARY_PATH(编译时)和 LD_LIBRARY_PATH(运行时动态库加载)。 - 在
/usr/include/<arch-specific> 中,<arch-specific> 是与系统架构相关的目录,如 /usr/include/x86_64-linux-gnu 或 /usr/lib/x86_64-linux-gnu。
源文件路径
| 变量名 | 含义 | 会因 add_subdirectory() 变化 | 会因 project() 变化 | 用途 | 推荐使用场景 |
|---|
CMAKE_SOURCE_DIR | 顶层 CMake 项目的源代码目录(CMake 最初运行的目录) | ❌ 否 | ❌ 否 | 全局设置、根路径引用 | 获取整个 CMake 项目的根目录 |
PROJECT_SOURCE_DIR | 当前 project() 指令所在目录 | ✅ 是 | ✅ 是 | 模块级路径引用(推荐) | 获取当前模块(Project)目录 |
CMAKE_CURRENT_SOURCE_DIR | 当前 CMakeLists.txt 文件所在目录 | ✅ 是 | ❌ 否 | 当前目录相关文件引用(强烈推荐) | 获取当前 CMakeLists.txt 所在目录 |