我想做的是创建一个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()
我发现的一种丑陋的方法是将变量导出到包含路径的父作用域并在宏中使用它。但如果可能的话,我宁愿只导出宏定义,以保持简洁。
Edit:澄清一下。我有一个顶级文件夹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()
你必须转移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().
参考
- 在CMake中,如何找到包含文件的目录?
- 设置和使用变量的 CMake 语法是什么?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)