在 mac 上的 Makefile 中链接 SDL

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

我正在尝试学习如何在我的 mac 上编写 C 代码时使用库(不使用 Xcode)。我的理解是,在 Mac 上,有一个 Library/Frameworks 文件夹,您可以在其中放置可以在不同项目之间共享的公共库。

此时我的目标是使用 SDL 库打开基本窗口,什么都不做,但我不知道如何在我的 mac 上使用库。因此,非常具体地说,我只想拥有一个我编写的名为

main.c
的应用程序代码文件,它将包含以下样板SDL代码:

#include "SDL2/SDL.h" // OR #include "SDL.h" (Not sure how the difference in path works)

int SCREEN_HEIGHT = 800;
int SCREEN_WIDTH = 600;

int main() {
  SDL_Init(SDL_INIT_VIDEO);
  SDL_Window *window = SDL_CreateWindow("SDL Game", 0, 0, 
  SCREEN_HEIGHT, SCREEN_WIDTH, SDL_WINDOW_HIDDEN);
  SDL_ShowWindow(window);

  SDL_Event event;
  int running = 1;

  while(running) {
    while(SDL_PollEvent(&event)) {
      if(event.type == SDL_QUIT) {
        running = 0;
      }
    }

    SDL_Delay( 32 );
  }

  SDL_DestroyWindow(window);
  SDL_Quit();

  return 0;
}

我从 SDL 网站(https://www.libsdl.org/download-2.0.php)下载了 mac 开发库,并将下载移动到我机器上的

/Library/Frameworks
文件夹,就像 SDL 指示的那样。但是我不知道在我的 Makefile 中要做什么来包含和链接库,然后用我的 main.c 文件编译。

以下是我的笔记本电脑/编译器的一些细节:

MacOS Bug Sur
Version 11.3.1
MacBook Pro (16-inch, 2019)
Processor: 2.3 GHz 8-Core Intel Core i9
Memory: 32 GB 2667 MHz DDR4
Startup Disk: Macintosh HD
Graphics: AMD Radeon Pro 5500M 8 GB
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin20.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

有人可以告诉我一个非常简单的 Makefile 的例子可以实现这个目标吗??

c macos makefile clang sdl
2个回答
0
投票

如果您从命令行或使用正确配置的 IDE 工作,您可以(在 GCC 中)使用

-l(library name)
标志链接。您要链接的库需要位于某些目录中,例如 /usr/lib、/usr/local/lib 或 MacOS 可能具有的某些库文件夹。如果不存在,则使用 -L(path/to/lib/directory) 告诉 GCC 在哪里可以找到它,然后再次使用
-l(library name)
标志。

库名称应以

lib
开头,并以
.a
.so
后缀结尾。所以如果你想链接到你自己的 SDL2 库构建:

gcc source.c -o mygame -Llibraries/ -lSDL2

假设图书馆在

libraries/libSDL2.so
下(最后的数字无关紧要)。


0
投票

在 OSX 上将 SDL 与 makefile 链接起来

由于这是一篇旧帖子,您可能已经离开了您的问题。
这就是为什么我不会花太多时间为您创建一个项目 设想。你只需要适应。
cLion 示例项目

安装自制软件

通过自制软件安装 SDL

$ brew install sdl2 sdl2_image sdl2_mixer sdl2_net sdl2_ttf

(你只需要sdl2,其他的都有用 如果您不想安装所选组件 只需删除它)

添加makefile

cmake_minimum_required(VERSION 3.24)
project(game_test C)

set(CMAKE_C_STANDARD 99)

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

add_executable(game_test main.c)
target_link_libraries(game_test ${SDL2_LIBRARIES})
# target_link_libraries(game_test ${SDL2_LIBRARIES} SDL2_ttf::SDL2_ttf)

让它成为一个应用程序(.app)(可选)

cmake_minimum_required(VERSION 3.24)
project(game_test C)

set(CMAKE_C_STANDARD 99)
set(CMAKE_MACOSX_BUNDLE TRUE)

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

add_executable(game_test main.c arial.ttf AppIcon.icns)
set(RESOURCE_FILES arial.ttf AppIcon.icns) # these files go into .app/Contents/Resources/
target_link_libraries(game_test ${SDL2_LIBRARIES})
# target_link_libraries(game_test ${SDL2_LIBRARIES} SDL2_ttf::SDL2_ttf)

set(MACOSX_BUNDLE_ICON_FILE AppIcon.icns)
set_target_properties(game_test PROPERTIES MACOSX_BUNDLE TRUE MACOSX_FRAMEWORK_IDENTIFIER ch.yiu.Counter RESOURCE "${RESOURCE_FILES}")
# <lastname>.<firstname>.<appname> or <domain>.<appname>
# (domain formatted as com.example instead of example.com)
© www.soinside.com 2019 - 2024. All rights reserved.