cmake --在Windows 10上未找到软件包'glfw 3'

j9per5c4  于 2022-11-11  发布在  Windows
关注(0)|答案(1)|浏览(233)
C:\mangetsu\build>cmake -DBUILD_GUI=On ..
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.29.30146.0
-- The CXX compiler identification is MSVC 19.29.30146.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: opengl32
-- Found PkgConfig: C:/Program Files/CMake/bin/pkg-config.exe (found version "0.26")
-- Checking for module 'glfw3'
--   No package 'glfw3' found
CMake Error at C:/Program Files/CMake/share/cmake-3.24/Modules/FindPkgConfig.cmake:607 (message):
  A required package was not found
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.24/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal)
  CMakeLists.txt:37 (pkg_check_modules)

我尝试安装它,但cmake似乎找不到它。
第一个
我试图使用cmake构建一个“程序”,但是遇到了问题,因为它找不到必要的软件包,尽管我已经安装了它们。
问题是它只教如何在Linux上安装,但在Windows上我不得不手动安装。
cmake会列出:

cmake_minimum_required(VERSION 3.1)
project(mangetsu LANGUAGES C CXX)

set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/;/usr/local/")

if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
  message(SEND_ERROR "In-source builds are not allowed.")
endif ()

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_COLOR_MAKEFILE ON)

set(CMAKE_CXX_STANDARD 17)

if (CMAKE_BUILD_TYPE MATCHES Debug)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4 -g3 -g -rdynamic")
  set(GCC_OPTIMIZATION "-O0")
endif ()

set(GCC_COVERAGE_COMPILE_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wno-unknown-pragmas -Werror -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=pragmas -Wno-error=unused-local-typedefs")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS} ${GCC_OPTIMIZATION}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")

# Put UI stuff behind a build flag so that people don't have to mess around

# with deps as much by default

if (${BUILD_GUI})
  # OpenGL
  include(FindOpenGL)
  include_directories(${OPENGL_INCLUDE_DIRS})

  # Glfw for windowing
  find_package(PkgConfig)
  list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
  pkg_check_modules(PC_LIBGLFW REQUIRED glfw3)
  include_directories(${PC_LIBGLFW_INCLUDE_DIRS})
endif()

include_directories(include)

# Json library

include_directories(vendor/json)

# Only build imgui lib if UI is enabled

if (${BUILD_GUI})
  include_directories(vendor/imgui/)
  add_library(imgui
      STATIC
      vendor/imgui/imgui.cpp
      vendor/imgui/imgui_draw.cpp
      vendor/imgui/imgui_impl_glfw.cpp
      vendor/imgui/imgui_impl_opengl2.cpp
      vendor/imgui/imgui_tables.cpp
      vendor/imgui/imgui_widgets.cpp
  )
  set_target_properties(imgui
      PROPERTIES POSITION_INDEPENDENT_CODE ON
  )
  target_link_libraries(imgui
     ${OPENGL_LIBRARIES}
     ${PC_LIBGLFW_LIBRARIES}
  )
endif()

add_library(mg_util
  src/util/fs.cpp
)

add_library(mg_data
  src/data/mzp.cpp
  src/data/mzx.cpp
  src/data/mrg.cpp
  src/data/nam.cpp
  src/data/nxx.cpp
)
target_link_libraries(mg_data
    z
    mg_util
)

add_executable(nxx_decompress
    src/tools/nxx_decompress.cpp
)
target_link_libraries(nxx_decompress
    mg_data
)

add_executable(nxgx_compress
    src/tools/nxgx_compress.cpp
)
target_link_libraries(nxgx_compress
    mg_data
)

add_executable(mzx_decompress
    src/tools/mzx_decompress.cpp
)
target_link_libraries(mzx_decompress
    mg_data
)

add_executable(mzx_compress
    src/tools/mzx_compress.cpp
)
target_link_libraries(mzx_compress
    mg_data
)

add_executable(mzp_info
    src/tools/mzp_info.cpp
)
target_link_libraries(mzp_info
    mg_data
)

add_executable(mzp_extract
    src/tools/mzp_extract.cpp
)
target_link_libraries(mzp_extract
    mg_data
    stdc++fs
)

add_executable(mzp_compress
    src/tools/mzp_compress.cpp
)
target_link_libraries(mzp_compress
    mg_data
)

add_executable(nam_read
    src/tools/nam_read.cpp
)
target_link_libraries(nam_read
    mg_data
)

if (${BUILD_GUI})
  add_executable(data_explorer
      src/tools/data_explorer.cpp
  )
  target_link_libraries(data_explorer
      mg_data
      imgui
  )
endif()

add_executable(script_text_to_content_json
    src/tools/script_text_to_content_json.cpp
)
target_link_libraries(script_text_to_content_json
    mg_data
    ssl
    crypto
)

add_executable(repack_script_text_translation
    src/tools/repack_script_text_translation.cpp
)
target_link_libraries(repack_script_text_translation
    mg_data
    ssl
    crypto
)

add_executable(mrg_extract
    src/tools/mrg_extract.cpp
)
target_link_libraries(mrg_extract
    mg_data
    stdc++fs
)

add_executable(mrg_pack
    src/tools/mrg_pack.cpp
)
target_link_libraries(mrg_pack
    mg_data
    stdc++fs
)

add_executable(mrg_info
    src/tools/mrg_info.cpp
)
target_link_libraries(mrg_info
    mg_data
    stdc++fs
)

add_executable(mrg_replace
    src/tools/mrg_replace.cpp
)
target_link_libraries(mrg_replace
    mg_data
    stdc++fs
)
nhaq1z21

nhaq1z211#

由于某些原因,https://www.glfw.org/download.html for Windows上的tarball不包含pkgconfig和CMake配置文件。从某种意义上说,这些包是格式错误的。
我建议从源代码构建和安装glfw或使用包管理器(例如在Windows上的conan或vcpkg)。
然后在您的CMakeLists.txt中:

[...]
find_package(glfw3 REQUIRED)
target_link_libraries(foo PRIVATE glfw)

CMake配置:

cmake -S . -B build -DCMAKE_PREFIX_PATH=<install/path/of/glfw>

PS:你的CMakeLists有很多与你的问题无关的问题(不可移植的方式做几件事:特定于gcc的编译器标志,到硬编码的unix库名称zlib & openssl的脆弱链接,到stdc++fs的链接,但它没有意义,不能用于许多编译器,CMAKE_MODULE_PATH中硬编码的绝对路径)。

相关问题