1

我正在研究使用 CMake 构建的 3dtk。你可以在这里找到它的 CMakeLists.txt:https ://sourceforge.net/p/slam6d/code/HEAD/tree/trunk/CMakeLists.txt

在几个地方它使用add_subdirectory指令并且从不提供第二个参数(the binary_dir)。

ccmake在 linux 上调用 out-of-tree 或cmake-gui在 windows上使用时,这似乎没有问题,因为在这两种情况下,项目配置成功。

但是当我cmake在命令提示符下在 windows 上运行时,我会收到几个这样的错误:

CMake Error at Z:/CMakeLists.txt:471 (add_subdirectory):
  add_subdirectory not given a binary directory but the given source
  directory "Z:/src/slam6d" is not a subdirectory of "Z:/". When specifying
  an out-of-tree source a binary directory must be explicitly specified.

我怀疑我只是缺少cmake命令的一个选项,但是哪个选项?

就像cmake-gui在 Windows 上,我指定了一个不同的路径来Where to build the binaries进行where is the source code树外构建,就像ccmake在 Linux 上我ccmake在我的源代码的子目录中运行一样ccmake ..,我cmake在 Windows 上从一个我的源的子目录。

那么什么是cmake-guiccmake做什么cmake不,以及在哪里需要人工干预呢?

编辑:找到解决方案后发现问题是我的源目录直接是一个 Windows 驱动器号而不是一个子目录。

4

2 回答 2

2

事实证明,这是cmake中的一个错误。引用大卫科尔:

将您的源代码放在子目录中。CMake 根本无法在 Windows 上的驱动器号的根目录下工作。CMakeLists.txt 必须位于根驱动器盘符路径下的至少一个子目录中。

还有一些关于这个问题的开放错误报告:

于 2015-08-07T17:38:29.480 回答
0

查看 josch 给出的错误报告,CMake 似乎不会在不久的将来修复此问题。我在 android NDK 项目上使用 cmake 时遇到了这个问题。

我的解决方案是使用联结(我使用 Windows 10),我无法将源文件夹移动到子目录。

要建立连接,请使用 mklink 命令(在 cmd.exe 中):

cd z:\
mklink /J MyProjectJp z:\

在资源管理器中,您将看到一个z:\MyProjectJpz:\. 现在要构建您的项目,请输入z:\MyProjectJp.

于 2016-10-06T18:28:21.913 回答