如何在使用CURRENT_SOURCE_DIR的sub_directory中定义cmake宏?

时间:2017-03-13 08:53:37

标签: 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和一个文件夹(my_folder)内置了一个文件夹,其中包含上述MWE CMakeLists.txt。顶级CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.6)
project(top_project CXX)
add_subdirectory(my_folder)
do_stuff()

2 个答案:

答案 0 :(得分:1)

您必须将宏外的CMAKE_CURRENT_LIST_DIR转移到另一个变量中,或者 - 在您的情况下 - 用户定义的全局属性:

StartCoroutine(Coroutine1(() => StartCoroutine(Coroutine2())));

当在添加了include()的文件中定义宏时,这也适用。

<强>参考

答案 1 :(得分:0)

使用CMAKE_SOURCE_DIR获取最外层父级CMakeLists.txt的路径。