CMake 开发随笔

搜索路径

在 Linux 平台上,CMake 本身不会自动扫描系统的所有头文件和库目录。只有在使用 find_package ()find_library ()find_path () 等命令时,CMake 才会按编译器默认查找路径和 CMake 模块规则来查找。

  • GCC 编译器默认查找的头文件目录:
1
2
3
/usr/include
/usr/local/include
/usr/include/<arch-specific>
  • GCC 编译器默认查找的库文件目录:
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 所在目录