1. 缘起

前几天想要在Jetbrains的CLion里开发C/C++的控制台程序,采用Cygwin的CMake。

但配置环境的时候出错了。

clion.cygwin.png

点击【more】,在弹窗里看到下面的内容:

1
2
3
4
5
6
7
8
CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
/cygdrive/c/cygwin64/share/cmake-3.20.0
CMake Error: Error executing cmake::LoadCache(). Aborting.


Error code: 1

我的cygwin64结构如下(省略了无关内容):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
c
└── cygwin64
    ├── bin
    ├── cygdrive
    ├── dev
    ├── etc
    ├── home
    ├── lib
    ├── sbin
    ├── tmp
    ├── usr
    │   └── share
    │       └── cmake-3.20.0
    └── var

可以看到cmake位于c/cygwin64/usr/share/。 但cygwin却尝试去c/cygwin64/share/下寻找cmake-3.20.0,自然找不到了。

2. 解决方案

遍寻Stack Overflow而不得后,不得不去啃官方文档,最后得出解决方案:

创建从cygwin64/sharecygwin64/usr/share的软连接。

根据cygwin的官方文档Symbolic links,在cygwin里创建软连接有多种方式,包括使用Cygwin控制台、WSL、Windows原生软连接等。

方便起见我直接用WSL进入/mnt/c/cygwin64,执行下面命令:

1
/mnt/c/cygwin64$ ln -s /mnt/c/cygwin64/usr/share share

执行完成后的效果是这样的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
c
└── cygwin64
    ├── bin
    ├── cygdrive
    ├── dev
    ├── etc
    ├── home
    ├── lib
    ├── sbin
    ├── share -> /mnt/c/cygwin64/usr/share
    ├── tmp
    ├── usr
    │   └── share
    │       └── cmake-3.20.0
    └── var

再回到CLion里看一下,Cygwin的Cmake就能被检测到了。

注:如果是用Cygwin控制台,步骤也差不多,就是路径开头不是/mnt/c/...而是/cygdrive/c/...

3. 体会

Stack Overflow也有靠不住的时候,老老实实啃官方英文文档才是最高效的。