Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用CMake和ncurses编译_C++_C_Git_Gcc_Cmake - Fatal编程技术网

C++ 无法使用CMake和ncurses编译

C++ 无法使用CMake和ncurses编译,c++,c,git,gcc,cmake,C++,C,Git,Gcc,Cmake,我知道类似的问题已经发布,但我看不出它们与我的案例有什么关系。在这个问题之前,我会说我对CMake不太熟悉,所以这完全有可能是一个快速解决方案,我只是看不到它 我正在合作一个项目,昨天我的队友将ncurses库添加到项目中,以构建终端GUI。自从添加ncurses之后,我就无法编译我的项目。但是,我确实安装了所有6个ncurses-*包,因此它应该在我的机器上运行 我已经从我们的GitHub repo中下载了最新版本的主分支,它可以在他的机器上完美地编译和运行。然而,它甚至不会在我的上编译 系统

我知道类似的问题已经发布,但我看不出它们与我的案例有什么关系。在这个问题之前,我会说我对CMake不太熟悉,所以这完全有可能是一个快速解决方案,我只是看不到它

我正在合作一个项目,昨天我的队友将ncurses库添加到项目中,以构建终端GUI。自从添加ncurses之后,我就无法编译我的项目。但是,我确实安装了所有6个ncurses-*包,因此它应该在我的机器上运行

我已经从我们的GitHub repo中下载了最新版本的主分支,它可以在他的机器上完美地编译和运行。然而,它甚至不会在我的上编译

系统: Linux Mint 18.1肉桂 CMake版本3.5.1

我尝试过的事情: 我删除了cmakcache.txt并重新加载了它 我删除了我的整个CMake构建目录,并重新编辑了make

CMakeLists.txt:

CMakeOutput:


有趣的是,如果我将irc_client_gui.c复制/粘贴到我机器上的其他地方,用gcc手动编译并运行它,它就可以完美地工作。所以问题不在于我的机器,而在于CMake试图编译我的整个项目。有什么想法吗?非常感谢

解决方案是添加一行,如下所示:

target_link_libraries(client ncurses)

这告诉CMake,当它链接客户机目标时,应该使用-lncurses选项链接ncurses库。

所以问题不是我的机器,而是CMake试图编译我的整个项目。-您的项目的CMakeLists.txt文件存在问题,但您没有显示它。@Tsyvarev oops,我只是将它添加到顶部。谢谢运行make VERBOSE=Y,这样您就可以确切地看到编译器/链接器是如何被调用的了?我强烈怀疑链接器步骤中没有传递-lncurses,因为您没有使用类似于target\u link\u库的东西。未定义的引用错误通常是由于链接过程中缺少-l参数引起的。@DavidGrayson您正好看到,我添加了一个“target_link_libraries”,并编译了它。非常感谢。我将把这条线添加到顶部,以便其他人可以看到解决方案。
CMakeFiles/client.dir/src/client/irc_client_gui.c.o: In function `main':
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:17: 
undefined reference to `initscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18: 
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18: 
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18: 
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18: 
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:19: 
undefined reference to `mvprintw'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:21: 
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:21: 
undefined reference to `wgetnstr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:22: 
undefined reference to `LINES'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:22: 
undefined reference to `mvprintw'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:23: 
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:23: 
undefined reference to `wgetch'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:24: 
undefined reference to `endwin'
collect2: error: ld returned 1 exit status
CMakeFiles/client.dir/build.make:94: recipe for target 'client' failed
make[2]: *** [client] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/client.dir/all' 
failed
make[1]: *** [CMakeFiles/client.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
target_link_libraries(client ncurses)