【发布时间】:2017-06-19 06:04:24
【问题描述】:
我有以下(简化的)目录结构:
|-- 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 命令
add_subdirectory(),所以我使用 CMake macro() 来“覆盖”这样的命令:
##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”,行为符合预期。但在“测试”目录中
覆盖的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 function() 而不是 macro() 似乎会导致相同的行为。
所以我的问题是:是否可以在 CMake 命令完成后恢复其默认行为
被覆盖了吗?
我使用的是 CMake 版本 3.5.2。
【问题讨论】: