|
@@ -0,0 +1,86 @@
|
|
|
+
|
|
|
+<html>
|
|
|
+<head>
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <title>Setting Up SDL2 with CMake | Ryozuki Blog</title>
|
|
|
+ <meta name="description" content="Here I explain how to setup and use SDL2 using the CMake build tool.">
|
|
|
+ <meta name="author" content="Ryozuki">
|
|
|
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
+ <link rel="stylesheet" href="/css/code.css">
|
|
|
+ <link rel="stylesheet" href="/css/style.css">
|
|
|
+ <meta name="twitter:card" content="summary" />
|
|
|
+ <meta name="twitter:site" content="@ShinobuWR" />
|
|
|
+ <meta name="twitter:creator" content="@ShinobuWR" />
|
|
|
+ <meta property="og:title" content="Setting Up SDL2 with CMake | Ryozuki Blog" />
|
|
|
+ <meta property="og:description" content="Here I explain how to setup and use SDL2 using the CMake build tool." />
|
|
|
+ <meta name='medium' content='blog'>
|
|
|
+</head>
|
|
|
+
|
|
|
+<body>
|
|
|
+<h1><span class="green">[</span>Setting Up SDL2 with CMake<span class="green">]</span></h1>
|
|
|
+<hr>
|
|
|
+<h2><span class="green">[</span>Installing CMake<span class="green">]</span></h2>
|
|
|
+<p>Most common distributions have cmake available on their package manager repostories:</p>
|
|
|
+<div class="highlight"><pre><span></span><span class="lineno">1 </span><span class="c1"># Debian based</span>
|
|
|
+<span class="lineno">2 </span>sudo apt install cmake
|
|
|
+<span class="lineno">3 </span>
|
|
|
+<span class="lineno">4 </span><span class="c1"># Arch</span>
|
|
|
+<span class="lineno">5 </span>pacman -S cmake
|
|
|
+</pre></div>
|
|
|
+<h2><span class="green">[</span>Install SDL2 libraries<span class="green">]</span></h2>
|
|
|
+<p>I only know about the debian based ones, if you are on another distro you should look them up.</p>
|
|
|
+<div class="highlight"><pre><span></span><span class="lineno">1 </span>sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev
|
|
|
+</pre></div>
|
|
|
+<h2><span class="green">[</span>Directory Structure<span class="green">]</span></h2>
|
|
|
+<p>Here is a common directory structure when using cmake to find packages:</p>
|
|
|
+
|
|
|
+<pre><code>├── cmake
|
|
|
+│ ├── FindSDL2.cmake
|
|
|
+│ ├── FindSDL2_mixer.cmake
|
|
|
+│ └── FindSDL2_net.cmake
|
|
|
+├── CMakeLists.txt
|
|
|
+└── src
|
|
|
+ └── main.cpp</code></pre>
|
|
|
+<p>You can find the cmake files to find SDL2 and it's components
|
|
|
+<a href="https://github.com/aminosbh/sdl2-cmake-modules">here</a></p>
|
|
|
+<p>Or you can use this simple command:</p>
|
|
|
+<div class="highlight"><pre><span></span><span class="lineno">1 </span><span class="nb">cd</span> cmake
|
|
|
+<span class="lineno">2 </span>wget https://raw.githubusercontent.com/aminosbh/sdl2-cmake-modules/master/FindSDL2<span class="o">{</span>,_gfx,_image,_mixer,_net,_ttf<span class="o">}</span>.cmake
|
|
|
+</pre></div>
|
|
|
+<h2><span class="green">[</span>Creating the CMakeLists.txt file<span class="green">]</span></h2>
|
|
|
+<div class="highlight"><pre><span></span><span class="lineno"> 1 </span><span class="nb">cmake_minimum_required</span><span class="p">(</span><span class="s">VERSION</span> <span class="s">3.13</span><span class="p">)</span>
|
|
|
+<span class="lineno"> 2 </span><span class="nb">project</span><span class="p">(</span><span class="s">MyProject</span><span class="p">)</span>
|
|
|
+<span class="lineno"> 3 </span>
|
|
|
+<span class="lineno"> 4 </span><span class="c"># Needed so that cmake uses our find modules.</span>
|
|
|
+<span class="lineno"> 5 </span><span class="nb">list</span><span class="p">(</span><span class="s">APPEND</span> <span class="s">CMAKE_MODULE_PATH</span> <span class="o">${</span><span class="nv">CMAKE_CURRENT_SOURCE_DIR</span><span class="o">}</span><span class="s">/cmake</span><span class="p">)</span>
|
|
|
+<span class="lineno"> 6 </span>
|
|
|
+<span class="lineno"> 7 </span><span class="nb">find_package</span><span class="p">(</span><span class="s">SDL2</span> <span class="s">REQUIRED</span><span class="p">)</span>
|
|
|
+<span class="lineno"> 8 </span><span class="nb">find_package</span><span class="p">(</span><span class="s">SDL2_net</span> <span class="s">REQUIRED</span><span class="p">)</span>
|
|
|
+<span class="lineno"> 9 </span><span class="nb">find_package</span><span class="p">(</span><span class="s">SDL2_mixer</span> <span class="s">REQUIRED</span><span class="p">)</span>
|
|
|
+<span class="lineno">10 </span><span class="nb">find_package</span><span class="p">(</span><span class="s">SDL2_image</span> <span class="s">REQUIRED</span><span class="p">)</span>
|
|
|
+<span class="lineno">11 </span><span class="nb">find_package</span><span class="p">(</span><span class="s">SDL2_gfx</span> <span class="s">REQUIRED</span><span class="p">)</span>
|
|
|
+<span class="lineno">12 </span><span class="nb">find_package</span><span class="p">(</span><span class="s">SDL2_ttf</span> <span class="s">REQUIRED</span><span class="p">)</span>
|
|
|
+<span class="lineno">13 </span>
|
|
|
+<span class="lineno">14 </span>
|
|
|
+<span class="lineno">15 </span><span class="nb">set</span><span class="p">(</span><span class="s">SOURCE_FILES</span>
|
|
|
+<span class="lineno">16 </span> <span class="s">src/main.cpp</span>
|
|
|
+<span class="lineno">17 </span> <span class="p">)</span>
|
|
|
+<span class="lineno">18 </span>
|
|
|
+<span class="lineno">19 </span><span class="nb">include_directories</span><span class="p">(</span><span class="s">src</span><span class="p">)</span>
|
|
|
+<span class="lineno">20 </span>
|
|
|
+<span class="lineno">21 </span><span class="nb">add_executable</span><span class="p">(</span><span class="s">MyProject</span> <span class="o">${</span><span class="nv">SOURCE_FILES</span><span class="o">}</span><span class="p">)</span>
|
|
|
+<span class="lineno">22 </span><span class="nb">target_link_libraries</span><span class="p">(</span><span class="s">MyProject</span> <span class="s">SDL2::Main</span> <span class="s">SDL2::Net</span> <span class="s">SDL2::Mixer</span> <span class="s">SDL2::Image</span> <span class="s">SDL2::TTF</span> <span class="s">SDL2::GFX</span><span class="p">)</span>
|
|
|
+</pre></div>
|
|
|
+<p>And thats it! Now you can remove the SDL2 components you don't want to use.</p>
|
|
|
+<h2><span class="green">[</span>Building<span class="green">]</span></h2>
|
|
|
+<p>Following the standard cmake procedure:</p>
|
|
|
+<div class="highlight"><pre><span></span><span class="lineno">1 </span>mkdir build
|
|
|
+<span class="lineno">2 </span><span class="nb">cd</span> build
|
|
|
+<span class="lineno">3 </span>cmake ..
|
|
|
+<span class="lineno">4 </span>make -j<span class="si">${</span><span class="nv">nproc</span><span class="si">}</span>
|
|
|
+</pre></div>
|
|
|
+
|
|
|
+</body>
|
|
|
+
|
|
|
+</html>
|
|
|
+
|