什么`-H`选项对CMake意味着什么?

Ele*_*ena 35 cmake

这个关于CMake的前一个问题的答案显示了这个命令行:

cmake -H. -Bbuild -G "MSYS Makefiles"
Run Code Online (Sandbox Code Playgroud)

-H.选项在这里执行什么任务?cmake --help-H打印帮助......

我正在使用CMake 3.2.3.

Ako*_*rth 43

如链接答案中所述,它是一个未记录的选项,但查看源代码会显示其效果:

cmake::SetArgs():

if(arg.find("-H",0) == 0)
  {    
  directoriesSet = true;
  std::string path = arg.substr(2);
  path = cmSystemTools::CollapseFullPath(path);
  cmSystemTools::ConvertToUnixSlashes(path);
  this->SetHomeDirectory(path);
Run Code Online (Sandbox Code Playgroud)

最后一次调用SetHomeDirectory实际上设置了项目的源目录.该-B选项(也未记录)依次设置二进制目录.

如果未设置这些选项,则二进制目录将是执行cmake的当前文件夹,并且源目录可以作为位置参数给出(如果未找到,则源文件夹也将是当前工作目录).

  • 为什么那些没有记录?:o (21认同)
  • @grisevg提交了[修复文档问题]的补丁(https://cmake.org/pipermail/cmake-developers/2016-June/028843.html).但它被拒绝了.关于为什么不能记录或删除(如果确实存在风险),仍然没有令人满意的答案.似乎开发团队不支持这些公共使用的选项. (8认同)
  • 我有cmake版本3.13.4,其中-H别名为--help男人说–help,-help,-usage,-h,-H /?打印使用情况信息并退出。 (2认同)

mlo*_*kot 7

《 CMake旅行者指南》同时解释了CMake 3.13选项中的旧版和新版:

  • -H

    此内部选项未记录,但已被社区广泛使用。

    在3.13中已用-S的正式源目录标志替换。

  • -B

    从CMake 3.13开始,-B是官方支持的标志,可以正确处理空格,并且可以独立于-S或-H选项使用。