是否可以修改CMAKE_SOURCE_DIR
以“欺骗”CMake认为顶级CMakeLists.txt
文件位于其他位置?
我有以下目录结构:
\src <--- not a repository
\cmake <--- repository
\common <--- repository
\project1 <--- repository
...
CMakeLists.txt <--- would like to locate this inside the cmake repository
上述结构的问题在于顶级CMakeLists.txt位于任何存储库之外,因此无法检入更改。
是否可以在cmake
目录中找到该文件(其中不包含任何其他内容),并且仍然运行CMake',就好像'该文件位于src
目录中一样?
注意
src
目录当然可以正常工作,但我正在寻找一种解决方案,它可以避免将文件复制回源控制目录答案 0 :(得分:7)
无法修改CMAKE_SOURCE_DIR
,也不应尝试修改add_subdirectory
。
问题在于:如果一个项目应该作为封闭的CMake项目的一部分构建(也就是说,它是通过CMAKE_*_DIR
包含的),那么它不能依赖于它正在构建的假设作为任何地方的顶级项目。特别是,必须非常谨慎地使用CMAKE_SOURCE_DIR
和CMAKE_BINARY_DIR
之类的变量,因为它们总是指向顶级CMake项目。应该使用相应的PROJECT_SOURCE_DIR
和PROJECT_BINARY_DIR
。
根据您所描述的内容,您可能处于以下两种情况之一:有问题的项目从未打算构建为另一个封闭的CMake项目的一部分,在这种情况下您可能不应该尝试这样做。在ExternalProject中查看单独构建项目的替代方法,作为封闭项目构建过程的一部分。
另一方面,如果有问题的项目应该支持这个构建设置,它只是在CMake脚本中有一个错误,你应该努力将PROJECT_*_DIR
变量替换为{{1}等价物。