在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)
我不认为有一个现成的变量,但你可以很容易地自己做:
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缓存该处理的值以供将来在宏内使用.