You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vcpkg集成libXi时CMake找不到配置文件的问题求助

解决CMake找不到libxi的问题

1. 修正CMakeLists.txt变量错误

你的target_link_libraries中使用了未定义的${TARGET_NAME},需替换为${PROJECT_NAME},否则编译时会找不到目标可执行文件。

2. 改用pkg-config查找libXi库

libXi作为X11核心库,vcpkg安装的libxi端口未提供CMake配置文件(即错误提示中的libxiConfig.cmake),需通过pkg-config来定位库文件和头文件路径。修改后的CMakeLists.txt如下:

# project_root/CMakeLists.txt
cmake_minimum_required(VERSION 3.26 FATAL_ERROR)

set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED True)
message("The c version is ${CMAKE_C_STANDARD}, using the ${CMAKE_C_COMPILER} compiler")

project(prj C)

# 启用pkg-config模块
find_package(PkgConfig REQUIRED)
# 通过pkg-config查找libXi
pkg_check_modules(LIBXI REQUIRED IMPORTED_TARGET xi)

add_executable(${PROJECT_NAME} main.c)

target_include_directories(${PROJECT_NAME} PUBLIC 
    "${PROJECT_BINARY_DIR}"
    "${CMAKE_CURRENT_SOURCE_DIR}/include/"
)

# 链接pkg-config提供的目标
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBXI)

3. 确保vcpkg与CMake正确集成

运行CMake时需指定vcpkg工具链文件,命令示例:

cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=/home/username/vcpkg/scripts/buildsystems/vcpkg.cmake

若使用VS Code,可在.vscode/settings.json中配置预设:

{
    "cmake.configureSettings": {
        "CMAKE_TOOLCHAIN_FILE": "/home/username/vcpkg/scripts/buildsystems/vcpkg.cmake"
    }
}

4. 备选方案:直接使用系统库

若无需vcpkg管理libXi,可直接安装系统开发包:

sudo apt-get install libxi-dev

对应的简化CMakeLists.txt:

cmake_minimum_required(VERSION 3.26 FATAL_ERROR)

set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED True)
message("The c version is ${CMAKE_C_STANDARD}, using the ${CMAKE_C_COMPILER} compiler")

project(prj C)

add_executable(${PROJECT_NAME} main.c)

target_include_directories(${PROJECT_NAME} PUBLIC 
    "${PROJECT_BINARY_DIR}"
    "${CMAKE_CURRENT_SOURCE_DIR}/include/"
)

# 直接链接系统libXi库
target_link_libraries(${PROJECT_NAME} PRIVATE Xi)

全局鼠标移动测试代码

以下代码可验证全局鼠标移动功能(需X11权限):

#include <X11/Xlib.h>
#include <stdio.h>

int main() {
    Display *dpy = XOpenDisplay(NULL);
    if (!dpy) {
        fprintf(stderr, "Failed to open display\n");
        return 1;
    }

    int screen = DefaultScreen(dpy);
    Window root = RootWindow(dpy, screen);

    // 移动鼠标到屏幕中心
    int x = DisplayWidth(dpy, screen) / 2;
    int y = DisplayHeight(dpy, screen) / 2;

    XWarpPointer(dpy, None, root, 0, 0, 0, 0, x, y);
    XFlush(dpy);

    XCloseDisplay(dpy);
    return 0;
}

内容的提问来源于stack exchange,提问作者Dhairya Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:22:40