目录
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}")
结果: