1. 故事背景

想从unity转unreal了,于是要使用c++进行开发。unreal引擎那么大,每次打开,我的小本都嗡嗡嗡的,想着不如用个轻量一些的引擎先开发吧,核心代码独立出来,到时候如果真要移植到unreal也方便。

在sdl2/sfml中纠结了一下,最终选择了文档相对较多的sdl2。本来试用了Xcode,但是实在是不习惯,感觉和JetBrains的编译器差太远了...决定还是用clion试一下。

但是到处看了各种参考资料,没有一篇能完全满足我的要求:

  • 1 在mac下开发
  • 2 使用c/c++进行开发
  • 3 用clion的CMake
  • 4 智能提示SDL2库方法

作为编程多年,但是c语言还停留在大学水平的开发,我还被迫学习了Cmake。

一番摸索完成后,决定自己写一篇,记录的同时,也造福其他需要的人。

话不多说,开始吧!

2. 利用homebrew安装sdl2

依次执行下面的命令就好了

  • 安装国内镜像的Homebrew,一路往下YES就行
$ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
  • 安装sdl2
$ brew install sdl2_mixer
  • 查看下sdl2库安装情况
$ brew info sdl2

根据安装的版本不同,可能得到不同的信息,下面是我的

sdl2: stable 2.0.16 (bottled), HEAD
Low-level access to audio, keyboard, mouse, joystick, and graphics
https://www.libsdl.org/
/usr/local/Cellar/sdl2/2.0.16 (91 files, 5.4MB) *
Poured from bottle on 2021-08-27 at 05:51:01
From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/sdl2.rb
License: Zlib
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 107,393 (30 days), 219,217 (90 days), 957,010 (365 days)
install-on-request: 10,041 (30 days), 19,802 (90 days), 91,778 (365 days)
build-error: 0 (30 days)

其中,第4行的/usr/local/Cellar/sdl2/2.0.16很有用,是我们安装sdl2库的位置,下面会用到。

3. 创建clion项目

我们分C项目和CPP项目。

创建项目的时候,记得选C Executable或者C++ Executable哦。

3.1 C项目

  • CMakeLists.txt内容
cmake_minimum_required(VERSION 3.20)
project(SimpleWindow C) set(CMAKE_C_STANDARD 11)
set(SDL_DIR /usr/local/Cellar/sdl2/2.0.16/)
include_directories(${SDL_DIR}/include/)
link_directories(${SDL_DIR}/lib/) add_executable(SimpleWindow main.c) target_link_libraries(SimpleWindow SDL2 SLD2_test SDL2main)
  • main.c内容
#include "stdio.h"
#include <SDL2/SDL.h> const int WIDTH = 400, HEIGHT = 400; int main() {
if (SDL_Init(SDL_INIT_EVERYTHING)) {
printf("Can not init video");
return 1;
} SDL_Window *win = SDL_CreateWindow(
"Hello world",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT,
SDL_WINDOW_ALLOW_HIGHDPI
); if (win == NULL) {
printf("Can not create window");
return 1;
} SDL_Event windowEvent;
while(1) {
if (SDL_PollEvent(&windowEvent)) {
if (SDL_QUIT == windowEvent.type) {
printf("SDL quit!!");
break;
}
}
} SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}

都创建好了之后,点击运行,可以看到下面的窗口

3.2 CPP项目

  • CMakeLists.txt内容
cmake_minimum_required(VERSION 3.20)
project(SimpleWindow) set(CMAKE_C_STANDARD 11)
set(SDL_DIR /usr/local/Cellar/sdl2/2.0.16/)
include_directories(${SDL_DIR}/include/)
link_directories(${SDL_DIR}/lib/)
add_executable(SimpleWindow main.cpp)
link_libraries(SDL2)
target_link_libraries(SimpleWindow SDL2 SDL2main)
  • main.cpp内容
#include <iostream>
#include <SDL2/SDL.h>
using namespace std; const int WIDTH = 400, HEIGHT = 400; int main() {
if (SDL_Init(SDL_INIT_EVERYTHING)) {
cout << "SDL could not initialized with error: " << SDL_GetError() << endl;
return 1;
} SDL_Window *win = SDL_CreateWindow(
"Hello world",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT,
SDL_WINDOW_ALLOW_HIGHDPI
); if (win == NULL) {
cout << "SDL could not create window with error: " << SDL_GetError() << endl;
return 1;
} SDL_Event windowEvent;
while(true) {
if (SDL_PollEvent(&windowEvent)) {
if (SDL_QUIT == windowEvent.type) {
cout << "SDL quit!!" << endl;
break;
}
}
} SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}

参考文章

mac安装brew(亲测)

SDL2 环境构建 (macOS + CLion + SDL2)

SDL2:第一个程序(Mac)

mac下用clion进行sdl2游戏开发de环境搭建的更多相关文章

  1. mac下使用clion构建boost库

    mac下使用clion构建boost库 使用brew install boost 完成后发现boost被安装在在/usr/local/Cellar/boost下 jetbrain给出的指导意见 htt ...

  2. 【1】windows下IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  3. IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  4. golang开发android环境搭建_window

    golang开发android环境搭建介绍 一 安装依赖软件: git:版本管理 go:  go开发环境(版本>=1.5),可直接下载window版的go安装包. android studio: ...

  5. 基于Axis1.4的webservice接口开发(环境搭建)

    基于Axis1.4的webservice接口开发(环境搭建) 一.环境搭建: 1.搜索关键字“Axis1.4”下载Axis1.4相关的jar包. 下载地址:http://download.csdn.n ...

  6. JM-1 手机网站开发测试环境搭建

    JM-1 手机网站开发测试环境搭建 一.总结 一句话总结:WEB服务器环境可实现局域网内轻松访问.360wifi可以实现局域网. 二.微网站开发环境: 1.把微网站放到本机wamp环境下,用pc浏览器 ...

  7. Python开发:环境搭建(python3、PyCharm)

    Python开发:环境搭建(python3.PyCharm) python3版本安装 PyCharm使用(完全图解(最新经典))

  8. 【nginx,apache】thinkphp ,laravel,yii2开发运行环境搭建

    缘由 经常会有人问xx框架怎么配置运行环境,这里我就给贴出吉祥三宝(Yii2,Laravel5,Thinkphp5 )的Nginx和Apache的配置,供大家参考 Nginx Yii2 server  ...

  9. ArcGIS API for Silverlight/ 开发入门 环境搭建

    Silverlight/ 开发入门 环境搭建1 Silverlight SDK下载ArcGIS API for Microsoft Silverlight/WPF ,需要注册一个ESRI Gloab ...

随机推荐

  1. 关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理

    前言 上一节介绍了 https://github.com/houbb/junitperf 的入门使用. 这一节我们从源码的角度,剖析一下其实现方式. 性能测试该怎么做? Junit Rules jun ...

  2. P3203 弹飞绵羊-分块

    P3203 弹飞绵羊-分块 观察数据范围,发现可以分块.只需要处理每个点跳出所在块后的位置和次数即可.目的是为了加速查询并降低修改复杂度. 对于修改,重构整个块内信息即可. 时间复杂度正确的一批 具体 ...

  3. Java中lombok @Builder注解使用详解(十八)

    Lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get.set方法.构造器.equal.toString方法的时间.除此之外,通过@Builder注解,lombok还可 ...

  4. SpringBoot之yaml语法及静态资源访问

    配置文件-yaml 在spring Boot开发中推荐使用yaml来作为配置文件. 基本语法: key: value:kv之间有空格 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 ...

  5. Python - 赋值运算符

    前置知识 先了解下变量: https://www.cnblogs.com/poloyy/p/15042257.html 再了解下算术运算符: https://www.cnblogs.com/poloy ...

  6. videojs文档翻译-Player(v6.0.0-RC.2)

    Player 当使用任何Video.js设置方法初始化视频时,将创建Player类的实例. 创建实例后,可以通过两种方式在全局访问: 调用videojs('example_video_1');直接通过 ...

  7. time() 在thinkphp 3.2.3 模板格式化输出

    {$ltime|date="Y-m-d",###}

  8. Linux--文件描述符、文件指针、索引节点

    Linux -- 文件描述符 文件描述符 Fd 当进程打开文件或创建新文件时,内核会返回一个文件描述符(非负整数),用来指向被打开的文件,所有执行I/O操作的系统调用(read.write)都会通过文 ...

  9. kivy八种布局方式学习

    kivy八种布局:FloatLayout.BoxLayout.AnchorLayout.GridLayout.PageLayout.RelativeLayout.ScatterLayout.Stack ...

  10. Python中print()函数的用法

    print()函数用于打印输出 1.函数语法: print(values,sep=' ',end='\n') sep和end是print()函数常用参数 参数sep是一次打印多个元素时的间隔符号,默认 ...