我们能否知道cmake中宏或函数所在的目录

fee*_*ree 5 cmake

在CMAKE中,它定义以下变量以指示文件的目录:

CMAKE_CURRENT_LIST_DIR
CMAKE_CURRENT_BINARY_DIR
CMAKE_CURRENT_SOURCE_DIR
Run Code Online (Sandbox Code Playgroud)

它们在处理CMake脚本时很有用.但是,它们都不能告诉您定义MACRO或函数的目录.给出以下示例CMakeLists.txt来说明我的问题

project(Hello)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/my_macro.cmake)
test_macro()
Run Code Online (Sandbox Code Playgroud)

然后对于my_macro.cmake,我们有以下定义test_macro():

macro(test_macro)
  message("hello")
  #?? Can we know the folder of this macro is located?
  #?? the macro definition file's location
endmacro()
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 6

我不认为有一个现成的变量,但你可以很容易地自己做:

my_macro.cmake:

set(test_macro__internal_dir ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "")

macro(test_macro)
  message(STATUS "Defined in: ${test_macro__internal_dir}")
endmacro()
Run Code Online (Sandbox Code Playgroud)

set()当包含文件时,将处理该行,并且CMAKE_CURRENT_LIST_DIR缓存该处理的值以供将来在宏内使用.