我目前正在玩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中不会出错。
答案 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})
将