gpt4 book ai didi

c++ - Windows下编译时如何使用CMake的pkg_search_module()?

转载 作者:可可西里 更新时间:2023-11-01 09:20:05 25 4
gpt4 key购买 nike

我正在编写一个使用 SDL2 和 CMake 的游戏。为了链接和包含 SDL2,我使用以下 CMake 代码:

include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2)
target_link_libraries(MYLIB SDL2)

在 Linux (Fedora) 下编译时,这非常有效。

但是 Windows 呢?我没有 DLL/a 文件和包含文件夹的标准系统位置。甚至没有 pkg​​-config。

这是我得到的错误:

Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE) 
checking for one of the modules 'sdl2'
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.0/Modules/FindPkgConfig.cmake:425 (message):
None of the required 'sdl2' found
Call Stack (most recent call first):
.../CMakeLists.txt:4 (pkg_search_module)

我使用的是 VS 2013 生成器。

最佳答案

您可能已经知道,pkg_search_module() 依赖于 pkg-config 程序来定位依赖项。正如您所指出的,Windows 没有随附 pkg-config。您可能能够安装它并让事情以这种方式工作,但跨平台构建的更好替代方法可能是改用 CMake 的 find_package() 函数。通过这种方式,您可以消除对在开发人员机器上安装 pkg-config 的依赖。

cmake_minimum_required(VERSION 3.1)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules")

find_package(SDL2 REQUIRED)

add_executable(sdl2demo sdl2demo.cpp)
target_include_directories(sdl2demo SYSTEM PRIVATE "${SDL2_INCLUDE_DIR}")
target_link_libraries(sdl2demo "${SDL2_LIBRARY}")

CMake 未附带用于查找 SDL2 的模块,因此您需要将其添加到源目录中。这就是上面设置 CMAKE_MODULE_PATH 的原因;您将跨平台工作的 cmake 脚本添加到 ${CMAKE_SOURCE_DIR}/cmake/Modules 中以查找 SDL2,然后您可以将该脚本与您的源代码一起交付。

我使用的 FindSDL2.cmake 模块是:http://freerct.googlecode.com/svn/trunk/CMake/FindSDL2.cmake

如果 SDL2 安装在标准位置,此脚本应该能够找到它。如果 SDL2 未安装在标准位置或无法通过此脚本定位,开发人员必须配置适当的 CMake 变量以告知 CMake 适当的位置,之后配置和构建才能正常进行。

cmake <source dir> -G "Visual Studio 12 2013 Win64" -DSDL2_INCLUDE_DIR=<sdl dir>/include -DSDL2MAIN_LIBRARY=<sdl dir>/lib/x64/SDL2main.lib -DSDL2_LIBRARY=<sdl dir>/lib/x64/SDL2.lib

关于c++ - Windows下编译时如何使用CMake的pkg_search_module()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com