首页 > 其他分享 >PROJECT_SOURCE_DIR 和 CMAKE_SOURCE_DIR

PROJECT_SOURCE_DIR 和 CMAKE_SOURCE_DIR

时间:2024-05-20 15:08:26浏览次数:27  
标签:CMakeLists PROJECT SOURCE 子项目 txt DIR

PROJECT_SOURCE_DIR 和 CMAKE_SOURCE_DIR对比

在 CMake 中,PROJECT_SOURCE_DIRCMAKE_SOURCE_DIR是两个非常重要的变量,它们都指向项目的源代码目录,但在多项目(子项目或多个 CMakeLists.txt 文件)的情况下,它们的值有所不同。

CMAKE_SOURCE_DIR

  • 定义CMAKE_SOURCE_DIR 指向最顶层的 CMakeLists.txt 文件所在的目录,即整个项目的根目录。
  • 用途:这个变量在整个项目构建过程中保持不变,无论当前处理的是哪个 CMakeLists.txt 文件。它非常适合用于定义整个项目范围内的源代码路径。

PROJECT_SOURCE_DIR

  • 定义PROJECT_SOURCE_DIR 指向包含最近一次调用 project() 命令的 CMakeLists.txt 文件的目录。
  • 用途:在包含多个子项目的情况下,每个子项目(每次调用 project() 命令)都会重新设置 PROJECT_SOURCE_DIR。这使得每个子项目可以有自己独立的源代码目录路径。

示例

比如说,我们有以下项目结构:

/MyProject (根目录)
|-- CMakeLists.txt       # 最顶层的 CMakeLists.txt
|-- lib
|   |-- CMakeLists.txt   # lib 目录的 CMakeLists.txt
|       project()        # 定义了一个子项目
|-- app
    |-- CMakeLists.txt   # app 目录的 CMakeLists.txt
        project()        # 定义了另一个子项目
最顶层CMakeLists.txt内容如图
子文件夹app下的CMakeLists.txt
子文件夹lib下的CMakeLists.txt

然后我们在项目根路径下执行以下指令

mkdir build
cd build
cmake ..
终端输出如图

我们可以从终端输出的Message信息看到,在整个项目构建过程中,无论当前处理的是哪个CMakeLists.txt,${CMAKE_SOURCE_DIR}这个变量保持不变,是项目的根路径。

每个子项目每次调用 project() 命令后,都会重新设置 ${PROJECT_SOURCE_DIR}。这使得每个子项目可以有自己独立的源代码目录路径。

标签:CMakeLists,PROJECT,SOURCE,子项目,txt,DIR
From: https://www.cnblogs.com/lidabo/p/18201987

相关文章

  • Dynamic DataSource 多数据源配置
    一、前言MybatisPlus多数据源配置主要解决的是多数据库连接和切换的问题。在一些大型应用中,由于数据量的增长或者业务模块的增多,可能需要访问多个数据库。这时,就需要配置多个数据源。 二、Springboot+MyBatisPlus数据源配置2.1、单数据源配置2.1.1、引用依赖<dep......
  • 题目:SHMIP The subglacial hydrology model intercomparison Project
    SHMIP(冰下水文模型比较计划)是一个致力于解决冰下水文多种理论方法问题的项目。该计划通过构建一系列综合模拟实验,并对运行这些模拟的各参与模型的结果进行比较,以达到其目标。这将有助于潜在的模型用户更加明智地为特定应用选择合适的模型。同时,对于模型开发人员来说,这将有助于他们......
  • Windows Active Directory(AD)域控制器(Domain Controller, DC)在企业IT管理中扮演着至关
    WindowsActiveDirectory(AD)域控制器(DomainController,DC)在企业IT管理中扮演着至关重要的角色,其优势、好处和作用体现在以下几个方面:优势与好处:集中化管理:权限与资源管理集中化,便于统一配置和控制,减少了管理的复杂度和成本。简化用户和计算机账户的创建、修改和删除......
  • Linux系列---【cannot open directory .: Input/output error】
    1.问题执行cd/tmp,rm-rf/tmp,ll/tmp时,发现报错:cannotopendirectory.:Input/outputerror。2.分析这个一般是因为磁盘损坏导致的,我的是因为我对xfs类型的lv_tmp未卸载,就强制缩容,导致了缩容失败,从而也造成了磁盘不可用。3.解决方案注意:这个方案会丢失数据#-l选项......
  • .Net6 web API (AOP理解--ResourceFilter)
    前沿Aop(AspectorientProgramming),面向切面编程,作为面向对象编程的一种补充,可以在不破坏之前的封装为基础动态增加一些功能;从而让系统更具备扩展性:增加一个缓存功能增加一个日志功能既希望不要违背开闭原则,也希望能够增加新的工能在之前的业务逻辑之前增加了逻辑,在之前......
  • RAG Project with Ollama and LangChain via Gradio Interface
    RAGProjectwithOllamaandLangChainviaGradioInterfacehttps://github.com/fanqingsong/rag-ollama-langchainThisrepositoryhoststheimplementationofaRetrieval-AugmentedGeneration(RAG)projectleveragingthecapabilitiesofOllamatorunopen-so......
  • Dynamic-Datasource动态数据源
    1、添加请求对应的数据源标签DynamicDataSourceContextHolder.push(ds);2、添加数据源  3、动态添加数据源privateDynamicRoutingDataSourcedataSource;privateDefaultDataSourceCreatordataSourceCreator;//创建数据源DataSourcePropertydataSourceProperty......
  • MacOS环境变量source生效但重启后又失效
      .bash_profile和.zshrc都是macos系统重环境变量配置的文件,但是两者有不同之处。.bash_profile:在执行source~/.bash_profile,只在当前窗口生效,但关闭当前终端窗口或者mac关机重启后不会再生效。.zshrc:在执行source~/.zshrc,这是永久生效的,mac每次启动会自动执行source......
  • Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?
    @Autowired和@Resource都是JavaSpring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC)。它们的区别主要在以下三个方面:源头不同 @Autowired是Spring自带的注解,而@Resource是JSR250规范中定义的注解。因此,在使用Spring框架的时候,通常建议使用@Autowired注解。  查找顺序......
  • Laravel Resource Routes和API Resource Routes讲解
    在Laravel中,ResourceRoutes和APIResourceRoutes是两种用于定义RESTful路由的便捷方法。它们帮助开发者快速创建遵循RESTful标准的路由集合,分别适用于普通Web应用和API应用。ResourceRoutesResourceRoutes是为传统的Web应用设计的,它们生成了一组常见的CRUD......