首页 > 解决方案 > CMake:此项目中使用了以下变量,但它们设置为 NOTFOUND

问题描述

我是 CMake 的新手,我知道有很多 StackOverflow 帖子问这个问题,但是这些帖子都没有帮助我解决这个错误,这就是我的工作区的样子

project
    .vscode
    build
    include\SDL2
    lib\SDL2_x64
    src
        CMakeLists.txt
        main.cpp
    CMakeLists.txt

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(project VERSION 0.1.0)

include(CTest)
enable_testing()

add_subdirectory(src)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

src/CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)

enable_testing()


add_executable(${CMAKE_PROJECT_NAME} main.cpp)

get_filename_component(PARENT_DIRECTORY ../ ABSOLUTE)

find_library(
    SDL2_X64_LIB
    PATHS "${PARENT_DIRECTORY}/lib"
)

find_path(
    INCLUDE_DIR
    PATHS "${PARENT_DIRECTORY}/include"
)

target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC "${SDL2_X64_LIB}")
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "${INCLUDE_DIR}")

# For debugging
message(STATUS "SDL2_LIB => ${SDL2_X64_LIB}")
message(STATUS "include_DIR => ${INCLUDE_DIR}")

我正在尝试将 SDL2 包含和库文件夹添加到 CMake,但它没有找到文件路径

-- SDL2_LIB => SDL2_X64_LIB-NOTFOUND
-- include_DIR => INCLUDE_DIR-NOTFOUND
-- Configuring done

我尝试将路径放入set()但仍然找不到SDL2/SDL.h,我使用的是最新版本的 CMake

标签: c++cmake

解决方案


正确的解决方案是从您下载的文件中创建一个 IMPORTED 目标并链接到它。您获取了 MinGW 版本,因此我将重点放在:将其添加到根目录中的 CMakeLists.txt 中:

add_library(SDL2 STATIC IMPORTED)
set_target_properties(SDL2 PROPERTIES
  IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/SDL2_x64/libSDL2.a"
  INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include")

然后在其他 CMake 文件中链接到该目标:

target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC SDL2)

推荐阅读