我正在尝试将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让我头疼。
[当您在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}
将是您在文件中定义的变量。]>