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

时间:2015-08-11 10:31:29

标签: cmake

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

CMAKE_CURRENT_LIST_DIR
CMAKE_CURRENT_BINARY_DIR
CMAKE_CURRENT_SOURCE_DIR

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

project(Hello)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/my_macro.cmake)
test_macro()

然后,对于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()

2 个答案:

答案 0 :(得分:5)

我认为没有一个现成的变量,但你可以轻松制作自己的变量:

<强> 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()

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

答案 1 :(得分:1)

在 CMake 3.17 中有 CMAKE_CURRENT_FUNCTION_LIST_DIR 可以在函数中使用,参见 https://cmake.org/cmake/help/v3.17/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.html 不幸的是,宏还没有这样的东西。