Windows下cscope -q选项出错的解决

以前曾有网友留言,在windows下使用cscope时,使用-q选项出现如下提示:

D:\Temp> cscope -Rbkq
Input file specified two times.

cscope: cannot create inverted index; ignoring -q option
cscope: removed files ncscope.in.out and ncscope.po.out 

当时Easwy以为是windows版本的cscope不支持-q选项。

不过网友Liang Feng昨天留言说:

Windows版本的cscope是支持-q选项的,出现以上错误是因为没找到合适的sort命令。所以只要cscope进程的工作目录下有GNU版本的sort就可以了。注意是进程的工作目录,不是可执行程序的目录。具体原因看一下cscope的代码片段。

build.c

#ifdef WIN32
snprintf(sortcommand, sizeof(sortcommand), “set LC_ALL=C && sort -T %s %s”, tmpdir, temp1);
#else
snprintf(sortcommand, sizeof(sortcommand), “env LC_ALL=C sort -T %s %s”, tmpdir, temp1);
#endif 

于是重新做了一下试验。在安装了Cygwin后,在cygwin的shell界面中使用cscope,没有出现上面的错误提示。但如果打开windows的命令行窗口cmd.exe,在里面执行cscope,则会出现上面的错误。

在仔细比较了cygwin和cmd.exe的环境后发现,原来是Windows自带的sort.exe搞的鬼。

在cygwin的shell窗口中,PATH环境变量的设置会使其先找到GNU版的sort.exe,所以上述cscope命令执行可以成功。但在cmd.exe窗口中,PATH环境变量会使其先找到windows自带的sort.exe而不是GNU sort.exe,所以会出现上面的错误提示。

知道了问题的原因,解决方法就很简单了,我们可以写一个批处理程序,在此程序中重设PATH环境变量,使cscope使用GNU版的sort.exe。示例程序如下:

D:\Temp> type cs.bat
@echo off
set path=c:\cygwin\bin;
cscope -Rbkq 

在这个批处理里,首先把path环境变量指向c:\cygwin\bin;,我的cscope.exe和GNU版的sort.exe都在此目录中。接下来现执行cscope命令,现在它使用的就是GNU版的sort.exe了。

在此感谢网友Liang Feng,谢谢他的提醒。

更多内容,请阅读易水博客上的其它文章。

“Windows下cscope -q选项出错的解决”的7个回复

  1. 现在可以使生成索引文件,但是会有提示信息, cscope: -q option mismatch between command line and old symbol database 。
    CScope版本是 15.7a, 这个警告严重么?

  2. @abcde
    还是会先找到windows自带sort.exe。
    解决办法: hexEdit cscope.exe 查找字符串”sort -T”改为”sart -T” ;然后把sort.exe改名为sart.exe即可。

  3. @stephenjy
    我也是这样设置。
    这个问题的出现,跟cmd里PATH环境变量的路径排列顺序有关,windows自带的sort.exe被先找到(它在c:\windows\system32目录中),因此,GNU的sort.exe就不会被使用了

  4. 我在win下习惯直接把cygwin的路径加入到环境变量PATH中,这样在cmd里面也可以直接用cygwin的所有工具。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注