【问题标题】:Prevent running cmake in the root directory防止在根目录下运行cmake
【发布时间】:2014-07-02 09:43:59
【问题描述】:

有时我忘记了我在构建文件夹中,而是在根目录中运行命令。好吧,也许你们中的一些人经历过这会在整个文件层次结构中造成混乱,因为您必须删除 CMakeFiles/ 文件夹、配置文件以及与 CPack 和 CTest 相关的文件。有没有办法可以在根目录的 Makefile 中添加一些东西来防止我意外运行 cmake?我尝试添加一个目标“cmake”,但这不起作用。

更新

我在here 中发现了同样的问题。我最终采用了按照该页面中的建议在我的 .bashrc 文件中放置一个函数:

function cmake() {
  # Don't invoke cmake from the top-of-tree
  if [ -e "CMakeLists.txt" ]
  then
    echo "CMakeLists.txt file present, cowardly refusing to invoke cmake..."
  else
    /usr/bin/cmake $*
  fi
}

【问题讨论】:

  • '根目录'可能并不像你想象的那样。

标签: makefile cmake


【解决方案1】:

如果源目录和二进制目录相同,您可以签入您的CMakeLists.txt。在您的CMakeLists.txt 中将这样的内容作为第一件事:

if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
    message(FATAL_ERROR "Source and build directories cannot be the same.")
endif()

【讨论】:

  • 伟大的@JesperE,成功了!几乎。现在的问题是这仍然会创建 CMakeCache.txt 和 CMakeFiles/ 目录。
  • 是的,不幸的是,这似乎无法避免。我认为这些文件是在控制权传递给 CMakeLists.txt 文件之前创建的。
  • 但是你可以在这种情况下清理它:} file (REMOVE CMakeCache.txt),准确地说。
  • file (REMOVE CMakeCache.txt) 实际上不起作用,因为它似乎在创建文件之前执行。奇怪的是,CMake 似乎在 FATAL_ERROR 之后创建了文件。奇怪的是,CMake 会强烈鼓励源外构建(有充分的理由!),然后很难防止意外的源内构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多