使用 raylib 静态库进行项目编译

Project compiling with raylib static library

本文关键字:项目 编译 raylib 静态 使用      更新时间:2023-10-16

我正在尝试使用 Raylib 库创建一个游戏。直到现在,我只是在main.cpp内尝试,并始终在终端内使用此行编译我的代码。

clang -std=c++11 -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL  libraylib.a main.cpp -o my_app

现在我想重新创建贪吃蛇游戏只是为了好玩。我以为我会明智地将主要.cpp分散到多个 src 文件中,但我实际上不知道我应该如何编译所有这些。我尝试创建一个CMakeList.txt如下所示:

cmake_minimum_required (VERSION 3.0)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework CoreVideo")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework IOKit")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework Cocoa")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework GLUT")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenGL")
project(Snake)
add_executable(
Snake
main.cpp
Snake.cpp
)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/librarylib.a)

但这行不通。这是错误消息。

CMake Error at CMakeLists.txt:18 (target_link_libraries):
Cannot specify link libraries for target "main" which is not built by this
project.

-- Configuring incomplete, errors occurred!

有没有更好的方法来编译这个项目,谁能向我解释-framework标志的实际作用? 我仍然想使用VSCode,因为我想学习如何更好地使用终端。

编辑:信息表brew ls --verbose raylib

/usr/local/Cellar/raylib/2.5.0/LICENSE.md
/usr/local/Cellar/raylib/2.5.0/INSTALL_RECEIPT.json
/usr/local/Cellar/raylib/2.5.0/.brew/raylib.rb
/usr/local/Cellar/raylib/2.5.0/CHANGELOG
/usr/local/Cellar/raylib/2.5.0/include/raylib.h
/usr/local/Cellar/raylib/2.5.0/HISTORY.md
/usr/local/Cellar/raylib/2.5.0/README.md
/usr/local/Cellar/raylib/2.5.0/lib/pkgconfig/raylib.pc
/usr/local/Cellar/raylib/2.5.0/lib/cmake/raylib/raylib-config-version.cmake
/usr/local/Cellar/raylib/2.5.0/lib/cmake/raylib/raylib-config.cmake
/usr/local/Cellar/raylib/2.5.0/lib/libraylib.2.5.0.dylib
/usr/local/Cellar/raylib/2.5.0/lib/libraylib.2.dylib
/usr/local/Cellar/raylib/2.5.0/lib/libraylib.a
/usr/local/Cellar/raylib/2.5.0/lib/libraylib.dylib

通过像这样设置我的CMakeLists.txt来解决它:

cmake_minimum_required(VERSION 3.0)
project(Snake)

set (CMAKE_CXX_STANDARD 11)
# Executable & linking
add_executable(${PROJECT_NAME} main.cpp snake.cpp)
if (NOT TARGET raylib)
find_package(raylib 2.5.0 REQUIRED)
endif()
target_link_libraries(${PROJECT_NAME} raylib)

您希望将可执行文件链接到librarylib.a。可执行文件的目标名称是Snake

如果我们看一下错误:

无法为不是由此项目构建的目标"main"指定链接库。

事实上,您从未添加过名为main的库或可执行文件。

这是您的target_link_libraries呼叫中应如下所示的内容:

target_link_libraries(Snake PUBLIC "${CMAKE_SOURCE_DIR}/librarylib.a")