gpt4 book ai didi

c++ - 无法使用 CMake 和 ncurses 进行编译

转载 作者:行者123 更新时间:2023-11-28 05:12:13 24 4
gpt4 key购买 nike

我知道已经发布了类似的问题,但我看不出它们与我的案例有什么关系。在这个问题的开头,我会说我对 CMake 不是很熟悉,所以这完全有可能是一个快速修复,但我只是看不到它!

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

我已经从我们的 GitHub 存储库中下载了最新版本的 master 分支,它可以在他的机器上完美编译和运行。但是它甚至不会在我的上编译。

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

我尝试过的事情:
我删除了 CMakeCache.txt 并重新加载了它
我删除了整个 CMake 构建目录并重新制作 make

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(irc)

set(SHARED_FLAGS " -Wall -Wextra -Wshadow -Werror -g -D_POSIX_C_SOURCE=200809L -lncurses")
set(CMAKE_C_FLAGS "-std=c11 ${SHARED_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=c++11 ${SHARED_FLAGS}")

include_directories(include)

add_library(client_core SHARED src/client/irc_client.c)

add_executable(client src/client/irc_client_gui.c)
add_executable(server src/server/irc_server.c)

// SOLUTION - MISSING LINE
target_link_libraries(client ncurses)

install(FILES include/irc_client.h DESTINATION include)
install(FILES include/irc_server.h DESTINATION include)

CMakeOutput:

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

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

最佳答案

解决方案是添加这样一行:

target_link_libraries(client ncurses)

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

关于c++ - 无法使用 CMake 和 ncurses 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43286266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com