使用cmake静态链接SDL2

问题描述 投票:0回答:1

我正在尝试将SDL2作为库添加到我的项目中。我想静态链接。

[我的CMakeLists.txt现在的样子是:

cmake_minimum_required(VERSION 3.16)
project(myproject)

find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})

add_executable(myproject src/main.cpp)

target_link_libraries(myproject ${SDL2_LIBRARIES})

效果很好,但是它是动态链接SDL。我怎么知道?我在二进制文件上运行了otool -L myproject

~/Workspace/myproject/cmake-build-release > otool -L myproject
        /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib (compatibility version 13.0.0, current version 13.0.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 902.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)

我在libSDL2.a中有一个库,但是Cmake选择了libSDL2.dylib

/usr/local/Cellar/sdl2/2.0.12_1/lib > ls
cmake               libSDL2.a           libSDL2_test.a      pkgconfig
libSDL2-2.0.0.dylib libSDL2.dylib       libSDL2main.a

我是C ++的新手,所以我对此感到非常困惑,CMake让我头疼。

c++ cmake sdl-2 static-linking
1个回答
0
投票

[当您在CMake中执行find_package时,将在某些CMAKE定义的路径中搜索Findxxx.cmake文件。

该命令有两种搜索包的模式:“模块”模式和“配置”模式。当使用上述简化签名调用命令时,模块模式可用。 CMake在CMAKE_MODULE_PATH中搜索名为Find.cmake的文件,然后进行CMake安装。

([https://cmake.org/cmake/help/latest/command/find_package.html

所以您必须定义自己的FindSDL2.cmake,它将告诉库在哪里。 (https://cmake.org/cmake/help/v3.17/manual/cmake-developer.7.html

并且您需要对find_package说,以搜索您自己的FindSDL2.cmake。您可以将路径传递到find_package以执行此操作。

如果使CMake使用文件,则变量${SDL2_INCLUDE_DIRS}${SDL2_LIBRARIES}将是您在文件中定义的变量。]​​>

© www.soinside.com 2019 - 2024. All rights reserved.