在CLion CMake中链接ncurses

时间:2016-12-07 12:34:26

标签: c++ ncurses

我目前正在玩ncurses。 Ncurses是我安装的库,不是我自己的文件。我已经做了一些事情但是使用IDE要容易得多,所以我决定使用CLion(我在Linux上使用Visual Studio)。我得到了以下CMakeLists.txt:

cmake_minimum_required(VERSION 3.6)
project(ncurses)

set(CMAKE_C_STANDARD "${CMAKE_C_FLAGS} -Wall -Werror -lpdcurses")

set(SOURCE_FILES main.cpp ncurses.h)
add_executable(ncurses ${SOURCE_FILES})

我的项目被称为ncurses我不知道这是否重要。

我得到了以下main.cpp

#include <ncurses.h>

int main() {
    initscr();
    printw("Hello");
    refresh();
    getch();
    endwin();
    return 0;
}

但是,我收到以下错误:

/opt/clion/bin/cmake/bin/cmake --build /home/josh/ClionProjects/ncurses /cmake-build-debug --target all -- -j 4
make[2]: *** No rule to make target 'CMakeFiles/ncurses.dir/build'.  Stop.
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/ncurses.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

我不知道问题所在。除了-lncurses之外,我尝试了lpdcurses,但这也不起作用。它只会在构建时出错,但在IDEA中不会出错。

3 个答案:

答案 0 :(得分:2)

CMakeLists.txt

只需添加:

set(CMAKE_CXX_FLAGS "-lncurses")

答案 1 :(得分:0)

要告诉编译器使用CMake链接库,应使用target_link_libraries()函数。

将此添加到您的CMakeLists.txt中:

target_link_libraries(${PROJECT_NAME} ncurses)

但是,您的错误代码似乎不是由链接引起的。尝试添加以下行:set(CMAKE_CXX_STANDARD 17)之前的add_executable()。用所需的任何C ++版本替换17。我很确定它不会改变任何东西,但是,值得一试。另外,别忘了重新加载cmake项目并重置缓存。

答案 2 :(得分:0)

对我来说,上面的解决方案不起作用。但是,将最后 4 行附加到下面的代码块对我有用。

(Linux mint 20,Clion 2020.3)


CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(<YOUR_PROJECT>)

set(CMAKE_CXX_STANDARD 14)

find_package(Curses REQUIRED)
include_directories(${CURSES_INCLUDE_DIR})
add_executable(<YOUR_PROJECT> main.cpp)
target_link_libraries(<YOUR_PROJECT> ${CURSES_LIBRARIES})

更改为您的实际项目名称。