cmake链接xlib目录c ++

Nik*_*nka 0 c++ linux ubuntu cmake clion

我正在尝试编译一个使用 xlib 和 cmake 的 c++ 程序。但是,我在 cmake 文件中包含和链接 xlib 库时遇到问题。

这是我得到的错误。

 main.cpp:378: undefined reference to `XClearWindow'
 collect2: error: ld returned 1 exit status
 CMakeFiles/project1.dir/build.make:94: recipe for target 'project1' failed
 make[2]: *** [project1] Error 1
 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/project1.dir/all' failed
 make[1]: *** [CMakeFiles/project1.dir/all] Error 2
 Makefile:83: recipe for target 'all' failed
 make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

当我只使用命令行编译时,它工作得很好。

我使用这个命令(g++ main.cpp -L/usr/X11R6/lib -lX11)

这是我的 cmake 文件。

cmake_minimum_required(VERSION 3.6)
project(project1)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

link_directories(/usr/X11R6/lib)

include_directories(/usr/share/X11)

set(SOURCE_FILES main.cpp)
add_executable(project1 ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

Ama*_*eus 7

在您的情况下,您忘记指定 cmake 应该用于链接您的应用程序的库(target_link_librarieslink_libraries)。

但是,为什么不让 cmake 自己找到所需的路径、库和包含?我建议你使用find_package(X11). 在您的情况下,您可以尝试:

cmake_minimum_required(VERSION 3.6)
project(project1)

set(CMAKE_CXX_STANDARD 11)  # for c++11

find_package(X11 REQUIRED)
link_libraries(${X11_LIBRARIES})
include_directories(${X11_INCLUDE_DIR})

set(SOURCE_FILES main.cpp)
add_executable(project1 ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)