Компиляция проекта с библиотекой raylib stati c - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь создать игру с библиотекой Raylib. До сих пор я просто пробовал внутри main.cpp и всегда компилировал свой код с этой строкой внутри терминала.

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

Теперь я хочу воссоздать игру Snake просто для удовольствия. Я думал, что буду мудрым, разложив основной файл. cpp в несколько файлов sr c, но на самом деле я не знаю, как мне все это скомпилировать. Я пытался создать 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

Ответы [ 2 ]

1 голос
/ 13 января 2020

Вы хотите связать свой исполняемый файл с librarylib.a. Целевое имя вашего исполняемого файла: Snake.

Если мы посмотрим на ошибку:

Невозможно указать библиотеки ссылок для цели "main", которая не создана этим проектом.

Действительно, вы никогда не добавляли библиотеку или исполняемый файл с именем main.

Вот что должно быть в вашем вызове target_link_libraries должно выглядеть так:

target_link_libraries(Snake PUBLIC "${CMAKE_SOURCE_DIR}/librarylib.a")
0 голосов
/ 15 января 2020

Решил, настроив 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...