当前位置: 首页 > news >正文

区分PROJECT_SOURCE_DIR, CMAKE_SOURCE_DIR,CMAKE_CURRENT_SOURCE_DIR

目录

示例工程

PROJECT_SOURCE_DIR的行为

CMAKE_SOURCE_DIR的行为

CMAKE_CURRENT_SOURCE_DIR


示例工程

根目录

        |-----CMakeLists.txt

        |-----sub1

                |--------CMakeLists.txt

        |-----sub2

                |--------CMakeLists.txt

根目录下的CMakeList.txt:

project(main)message("main CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("main CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("main PROJECT_SOURCE_DIR = ${PROJECT_SOURCE_DIR}")add_subdirectory(sub1)
add_subdirectory(sub2)

sub1目录下的CMakeLists.txt

project(sub1)message("sub1 CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("sub1 PROJECT_SOURCE_DIR = ${PROJECT_SOURCE_DIR}")

sub2目录下的CMakeLists.txt

message("sub2 CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("sub2 PROJECT_SOURCE_DIR = ${PROJECT_SOURCE_DIR}")

 sub1与sub2的CMakeLists的区别仅仅在于开头有没有使用project命令

PROJECT_SOURCE_DIR的行为

在根目录下运行cmake .

PROJECT_SOURCE_DIR的取值受两个因素影响:1所在目录 ,2所在的CMakeLists.txt有没有调用project命令

从打印结果可以看出来:

1 根目录下的CMakeLists.txt的PROJECT_SOURCE_DIR等于根目录路径;

2 如果不在根目录下,而是在子目录下,则:

2.1 如果子目录的CMakeLists.txt使用了project命令,则PROJECT_SOURCE_DIR等于当前子目录路径;

2.2 如果子目录的CMakeLists.txt没有使用project命令,则PROJECT_SOURCE_DIR等于上一层CMakeLists.txt的PROJECT_SOURCE_DIR

CMAKE_SOURCE_DIR的行为

不论CMakeLists在根目录还是子目录,也不论CMakeLists.txt里面有没有调用project函数,CMAKE_SOURCE_DIR都等于根目录路径

CMAKE_CURRENT_SOURCE_DIR

不论CMakeLists在根目录还是子目录,也不论CMakeLists.txt里面有没有调用project函数,CMAKE_CURRENT_SOURCE_DIR都等于当前目录路径

相关文章:

  • windows下查看idea运行的进程占的JVM情况工具
  • Agent2Agent
  • 校平机:金属板材加工的核心设备
  • x86系列CPU寄存器和汇编指令总结
  • Kettle学习
  • VSCode远程登录云服务器并设置免密登录全攻略
  • LeetCode --- 446 周赛
  • 2.4.5goweb项目上传到csdn的git仓库
  • Eigen的主要类及其功能
  • 《数据库系统工程师》-B站-视频截图整理-2021-23
  • JavaScript原生实现简单虚拟列表(列表不定高)
  • 【数据结构刷题】顺序表与ArrayList
  • 2025.04.26-美团春招笔试题-第一题
  • 使用 LangGraph 和 Elasticsearch 构建强大的 RAG 工作流
  • JDBC数据库操作中如何保证最后关闭了所占用的资源——try用法的细节控制
  • 【信息融合】卡尔曼滤波EKF毫米波雷达和红外数据信息融合
  • 参考平面的宽度-信号与电源完整性分析
  • uniapp开发03-轮播图组件swiper的简单使用案例
  • Webpack模块打包工具
  • [计算机科学#2]:从继电器到晶体管的电子计算机发展史(庞然大物的进化)
  • 5月动漫|“爱死机”即将回归,《明末》或是下一个大IP?
  • 上海潮汕联谊会举行换届大会,陈湖文当选会长
  • 大学2025丨专访北邮校长徐坤:工科教育要真正回归工程本质
  • 价格周报|猪价继续回暖:二次育肥热度仍存,对猪价仍有一定支撑
  • 新城市志|中国消费第一城,迎来“补贴力度最大”购物节
  • 四川甘孜州白玉县发生4.9级地震,震源深度10千米