cmake include命令

目录

cmake include命令

CMAKE_CURRENT_LIST_DIR:

CMAKE_CURRENT_LIST_FILE:

CMAKE_CUEERNT_LIST_LINE:

demo

top CMakeLists.txt

test.cmake

subDir下的 CMakeLists.txt

结果:


cmake include命令

include()命令也是将一个新的cmake内容引入当前cmake内容中.

格式:

include(fileName [OPTIONAL] [RESULT_VARIABLE myVar] [NO_POLICY_SCOPE])
include(module   [OPTIONAL] [RESULT_VARIABLE myVar] [NO_POLICY_SCOPE])

第一种形式有点类似与add_subdirectory()命令,但是有着重要的区别:

  • include()期望读取文件的名称,而add_subdirectory()期望一个目录,并将该目录中查找CMakeLists.txt文件.
  • 传递给include()的文件名通常具有扩展名.cmake,但它可以是任何东西.
  • include()不会引入新的变量作用域,而add_subdirectory()会引入.
  • 默认情况下,这两个命令都引入了一个新的策略作用域,但是可以使用NO_POLICY_SCOPE选项告诉include()命令不要这样做(add_subdirectory()没有此类选项).
  • CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_BINARY_DIR变量的值在处理include()命令引入的文件时不会改变,而会为add_subdirectory()引入子目录而改变.

第二种形式具有完全不同的目的.它用于加载模块.

由于在调用include()时,CMAK_CURRENT_SOURCE_DIR的值不会改变,因此包含的文件我们很难计算出它所在的目录.

此外,与add_subdirectory()不同,文件名始终是CMakeLists.txt,当使用include()时,文件的名称可以是任何东西,因此包含的文件可能很难确定自己的名称.好在CMake给我们提供了另外一组变量.

CMAKE_CURRENT_LIST_DIR:

类似于CMAKE_CURRENT_SOURCE_DIR,只是在处理include的文件时才会更新.这是需要处理的当前文件的目录时使用的变量,无论它是如何添加到构建的.它永远是一个绝对路径.

CMAKE_CURRENT_LIST_FILE:

始终提供当前正在处理的文件的名称.它始终持有文件的绝对路径,而不仅仅是文件名.

CMAKE_CUEERNT_LIST_LINE:

保存当前正在处理的文件的行号.这个变量很少需要,但是在某些调试场景中很有用的.

demo

目录结构016文件下有一个top CMakeLists.txt 有一个cmake文件夹,里面有一个test.cmake文件,有一个subDir文件夹里面有一个 CMakeLists.txt 文件

top CMakeLists.txt
cmake_minimum_required(VERSION 3.26 FATAL_ERROR)

project(project016
    VERSION 0.0.1
    LANGUAGES CXX)

message("top: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("top: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("top: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
message("top: CMAKE_CURRENT_LIST_DIR   = ${CMAKE_CURRENT_LIST_DIR}")
message("top: CMAKE_CURRENT_LIST_FILE  = ${CMAKE_CURRENT_LIST_FILE}")
message("top: CMAKE_CURRENT_LIST_LINE  = ${CMAKE_CURRENT_LIST_LINE}")

add_subdirectory(subDir)
message("-----------------------------------------------")
include(cmake/test.cmake)
test.cmake
cmake_minimum_required(VERSION 3.26 FATAL_ERROR)

message("test.camke: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("test.camke: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
message("test.camke: CMAKE_CURRENT_LIST_DIR   = ${CMAKE_CURRENT_LIST_DIR}")
message("test.camke: CMAKE_CURRENT_LIST_FILE  = ${CMAKE_CURRENT_LIST_FILE}")
message("test.camke: CMAKE_CURRENT_LIST_LINE  = ${CMAKE_CURRENT_LIST_LINE}")
subDir下的 CMakeLists.txt
cmake_minimum_required(VERSION 3.26 FATAL_ERROR)

message("child: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("child: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
message("child: CMAKE_CURRENT_LIST_DIR   = ${CMAKE_CURRENT_LIST_DIR}")
message("child: CMAKE_CURRENT_LIST_FILE  = ${CMAKE_CURRENT_LIST_FILE}")
message("child: CMAKE_CURRENT_LIST_LINE  = ${CMAKE_CURRENT_LIST_LINE}")
结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值