如何在使用CURRENT_SOURCE_DIR的子目录中定义cmake宏?

我想做的是创建一个CMakeLists.txt,它定义一个在父范围内使用的便捷宏.我可以使用宏.但是,我使用了${CMAKE_CURRENT_SOURCE_DIR},不幸的是,它不是宏定义所在的CMake脚本的目录,而是从中调用该宏的目录.有什么办法可以改变吗?

MWE

cmake_minimum_required(VERSION 3.6)
project(git_info CXX)
macro(do_stuff)
    message("This CMakeLists.txt file is in ${CMAKE_CURRENT_SOURCE_DIR}")
endmacro()

我发现的一种丑陋方法是将变量导出到包含路径的父作用域,并在宏中使用它.但是,我希望仅导出宏定义(如果可能),以保持环境整洁.

编辑:
澄清一下.我的顶层CMakeLists.txt有一个文件夹,上面的MWE CMakeLists.txt有一个文件夹(my_folder).顶级CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.6)
project(top_project CXX)
add_subdirectory(my_folder)
do_stuff()
最佳答案
您必须将宏之外的CMAKE_CURRENT_LIST_DIR转移到另一个变量,或者-在您的情况下-是用户定义的全局属性:

set_property(GLOBAL PROPERTY DoStuffPath "${CMAKE_CURRENT_LIST_DIR}")

macro(do_stuff)
    get_property(_my_marcros_file GLOBAL PROPERTY DoStuffPath)
    message("This CMakeLists.txt file is in ${_my_marcros_file}")
endmacro()

当宏在添加了include()的文件中定义时,也可以使用.

参考

> In CMake, how can I find the directory of an included file?
> What’s the CMake syntax to set and use variables?

转载注明原文:如何在使用CURRENT_SOURCE_DIR的子目录中定义cmake宏? - 代码日志