在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()
答案 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
不幸的是,宏还没有这样的东西。