mac cscope 编译错误

  今天晚上在Mac上安装cscope插件时,碰到一个编译问题。虽然最近在编译一个C++工程时也碰到不少编译的问题,但是对于今天碰到的这个问题,还是第一次碰到。具体情况如下:

  在编译cscope-15.8a版本的代码,make这一步时抛出如下错误

  1. In file included from build.c:50:
    /usr/include/ncurses.h:539:40: error: macro “cbreak” passed 1 arguments, but takes just 0
    /usr/include/ncurses.h:564:44: error: macro “erasechar” passed 1 arguments, but takes just 0
    /usr/include/ncurses.h:600:43: error: macro “killchar” passed 1 arguments, but takes just 0
    make[2]: *** [build.o] Error 1
    make[1]: *** [all-recursive] Error 1
    make: *** [all] Error 2

     

 

  于是grep一下cscope的源码,找到constants.h中含有这几个方法。代码如下:

#if (BSD || V9) && !__NetBSD__ && !__FreeBSD__

  # define TERMINFO 0 /* no terminfo curses */

  #else

  # define TERMINFO 1

  #endif

  #undef TERMINFO 0

  #define TERMINFO 1

  #if !TERMINFO

  # ifndef KEY_BREAK

  # define KEY_BREAK 0400 /* easier to define than to add #if around the use */

  # endif

  # ifndef KEY_ENTER

  # define KEY_ENTER 0401

  # endif

  # ifndef KEY_BACKSPACE

  # define KEY_BACKSPACE 0402

  # endif

  # if !sun

  # define cbreak() crmode() /* name change */

  # endif

  # if UNIXPC

  # define erasechar() (_tty.c_cc[VERASE]) /* equivalent */

  # define killchar() (_tty.c_cc[VKILL]) /* equivalent */

  # else

  # define erasechar() (_tty.sg_erase) /* equivalent */

  # define killchar() (_tty.sg_kill) /* equivalent */

  # endif /* if UNIXPC */

  #endif /* if !TERMINFO */
 

  看这段代码,只要让TERMINFO为1,即可不使用这几个函数。于是加上上面第11行和第13行代码,即可通过编译。

发布者

虚妄的存在感

我尊重你的存在感,但我鄙视你虚妄的存在感。