我有以下(简化的)目录结构:
|-- doc/
|-- subdir1/
|-- subdir2/
|-- CMakeLists.txt
|-- src
|-- subdir3/
|-- subdir4/
|-- CMakeLists.txt
|-- test
|-- subdir5/
|-- subdir6/
|-- CMakeLists.txt
|-- CMakeLists.txt
顶层CMakeLists.txt
包含类似以下内容:
add_subdirectory(doc)
add_subdirectory(src)
add_subdirectory(test)
仅在内部src/CMakeLists.txt
我想使用我自己的 CMake 命令版本
添加子目录(),所以我使用 CMakemacro()像这样“覆盖”命令:
##src/CMakeLists.txt
macro(add_subdirectory)
message(STATUS "My own 'add_subdirectory()'")
_add_subdirectory(${ARGV})
endmacro(add_subdirectory)
# Call specialized version of 'add_subdirectory()'
add_subdirectory(subdir3)
add_subdirectory(subdir4)
顶层CMakeLists.txt
包含类似以下内容:
add_subdirectory(doc) #Uses CMake standard command 'add_subdirectory()'
add_subdirectory(src) #Uses overwritten 'add_subdirectory()'
add_subdirectory(test) #Should use CMake standard command 'add_subdirectory()'
对于目录“doc”和“src”,行为符合预期。但在“test”目录中
被覆盖add_subdirectory()
仍然适用,这不是我所期望的。我当时在
印象中,由于范围规则,默认行为add_subdirectory()
会被使用。
尝试通过添加来恢复默认行为
macro(add_subdirectory)
_add_subdirectory(${ARGV})
endmacro(add_subdirectory)
在运行 CMake 时,“src/CMakeLists.txt”末尾会导致分段错误,我对此
假设是无限递归调用的结果。这里提出了类似的建议:
https://cmake.org/pipermail/cmake/2012-April/050023.html
使用 CMake功能()代替macro()
似乎会导致相同的行为。
所以我的问题是:是否可以在 CMake 命令执行后恢复其默认行为
被覆盖?
我正在使用 CMake 版本 3.5.2。