【发布时间】:2012-09-29 22:08:51
【问题描述】:
假设我的项目的CMakeLists.txt 包含foo.cmake:
include(foo)
在foo.cmake,我想知道foo.cmake的路径。
我该怎么做?
注意CMAKE_CURRENT_LIST_DIR 给出了包含CMakeLists.txt 的目录,而不是包含foo.cmake 的目录,因此不是我想要的。
当然,foo.cmake 可能包含在多个项目中(即多个CMakeLists.txt 文件)。
【问题讨论】:
-
您使用的是什么版本的 CMake?在 Windows 7 上的 2.8.9 中,
CMAKE_CURRENT_LIST_DIR的行为与文档一致。即如果foo.cmake包含命令message("foo dir - ${CMAKE_CURRENT_LIST_DIR}")它输出包含foo.cmake的目录,而不是父CMakeLists.txt的目录。 -
是的,
CMAKE_CURRENT_LIST_DIR的行为与文档一致。不,这不是我想要的:我希望获得foo.cmake的目录,而不是包含foo.cmake的CMakeLists.txt的目录。 -
你似乎在这里自相矛盾。如果你在 CMakeLists.txt 中引用
CMAKE_CURRENT_LIST_DIR,它会产生 CMakeLists.txt 的目录。如果你在 foo.cmake 中引用CMAKE_CURRENT_LIST_DIR,它会产生 foo.cmake 的目录。 -
CMAKE_CURRENT_LIST_DIRinfoo.cmake产生CMakeLists.txt的目录,不是,正如你所写,foo.cmake的目录(当然,如果这两个目录除外恰好是相同的)。根据documentation:当前正在处理的列表文件的完整路径。,我的实验证实这确实是CMAKE_CURRENT_LIST_DIR的行为方式。 -
Robert Dailey's answer 是正确的。如果这不是您所看到的,那就大错特错了。你试过他的解决方案吗?如果您有,并且您的结果与他的回答不符,您能否发布最小的示例 CMake 文件、您的目录结构、您的 CMake 版本、您的平台详细信息以及您用于调用 CMake 的命令?