I'm building a game with raylib and made my own custom button in different files to reuse it when I need it.
I watched tons of videos and read docs but I don't know why it throws undefined reference to CustomButton::CustomButton()
.
Here's the error:
/usr/bin/ld: CMakeFiles/AstroX.dir/src/main.cpp.o: in function `_GLOBAL__sub_I_main':
main.cpp:(.text.startup+0xaca): undefined reference to `CustomButton::CustomButton(Vector2, float, Texture2D, char const*, int, Color)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/AstroX.dir/build.make:105: AstroX] Error 1
make[1]: *** [CMakeFiles/Makefile2:153: CMakeFiles/AstroX.dir/all] Error 2
make: *** [Makefile:156: all] Error 2
Here's my folder structure:
My CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(AstroX VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 17)
# Setting parameters for raylib
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # don't build the supplied examples
set(BUILD_GAMES OFF CACHE BOOL "" FORCE) # or games
add_library(
custom_button
src/custom_button.cpp
src/custom_button.hpp
)
add_subdirectory(libs/raylib)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(AstroX PRIVATE custom_button)
target_link_libraries(${PROJECT_NAME} PRIVATE raylib)
Here's my custom_button.hpp:
#ifndef BUTTON_INCLUDED
#define BUTTON_INCLUDED
#include "raylib.h"
class CustomButton {
public:
// Position and the size of the button
Vector2 position; // position of the button (x,y)
float scale; // scale of the button
// Texture and Text inside it
Texture2D texture; // texture of the button
const char* text; // text of the button (placed in the middle of the button)
int fontSize; // font size of the text
Color textColor; // color of the text
// Constructor
CustomButton(Vector2 position, float scale, Texture2D texture, const char* text, int fontSize, Color textColor);
// State getters
bool isHovered(); // check if the mouse is hovering over the button
bool isClicked(); // check if the button is clicked
};
#endif
My custom_button.cpp:
#include "custom_button.hpp"
CustomButton::CustomButton(Vector2 position, float scale, Texture2D texture, const char* text, int fontSize, Color textColor) {
this->position = position;
this->scale = scale;
this->texture = texture;
this->text = text;
this->fontSize = fontSize;
this->textColor = textColor;
}
bool CustomButton::isHovered() {
Vector2 mouse_location = GetMousePosition();
if (mouse_location.x > position.x && mouse_location.x < position.x + texture.width * scale &&
mouse_location.y > position.y && mouse_location.y < position.y + texture.height * scale) {
return true;
}
return false;
}
bool CustomButton::isClicked() {
if (isHovered()) {
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) {
return true;
}
}
return false;
}
And finally my main.cpp:
#include "raylib.h"
#include <string>
#include <math.h>
#include "custom_button.hpp"
#define PLAYER_SIZE 0.2f
#define PLAYER_SPEED 6.0f
#define PLAYER_ACCELERATION 0.5f
#define PLAYER_MAX_ACCELERATION 2.0f
#define DRAG 0.04f
//------
// Types
//------
struct Player {
Vector2 position;
Vector2 speed;
float acceleration;
float rotation;
};
//--------
// Globals
//--------
static const int screenWidth = 1000;
static const int screenHeight = 800;
static bool gameOver = false;
static bool pause = false;
static bool victory = false;
static float shipHeight = 0.0f;
static Player player = { 0 };
static Texture2D playerTexture;
static Texture2D btnTexture;
static CustomButton btnPlay = CustomButton(Vector2{ screenWidth / 2, screenHeight / 2 }, 0.5f, btnTexture, "Play", 20, WHITE );
static void InitGame(); // Initialize game
static void UpdateGame(); // Update game (one frame)
static void DrawGame(); // Draw game (one frame)
static void UnloadGame(); // Unload game
static void UpdateDrawFrame(); // Update and Draw (one frame)
int main()
{
InitWindow(screenWidth, screenHeight, "AstroX");
SetTargetFPS(60);
InitGame();
while (!WindowShouldClose())
{
UpdateDrawFrame();
}
UnloadGame();
CloseWindow();
return 0;
}
//-----------
// Functions
//-----------
// Initialize game variables
void InitGame()
{
bool correctRange = false;
victory = false;
pause = false;
shipHeight = (playerTexture.height * PLAYER_SIZE) / tanf(20*DEG2RAD);
// Initialization player
playerTexture = LoadTexture("/home/d3r1n/Desktop/Projects/AstroX/assets/Spaceship.png");
player.position = Vector2 {screenWidth/2 - (float) playerTexture.width * PLAYER_SIZE, screenHeight / 2 - (float) playerTexture.height * PLAYER_SIZE};
player.speed = Vector2 {0, 0};
player.acceleration = 0;
player.rotation = 0;
}
// Update game (one frame)
void UpdateGame(void)
{
if (!gameOver)
{
if (IsKeyPressed('P')) pause = !pause;
if (!pause)
{
// Player logic: rotation
if (IsKeyDown(KEY_LEFT)) player.rotation -= 5;
if (IsKeyDown(KEY_RIGHT)) player.rotation += 5;
if (player.rotation > 360) player.rotation -= 360;
if (player.rotation < -360) player.rotation += 360;
// Player logic: speed
player.speed.x = sin(player.rotation*DEG2RAD)*PLAYER_SPEED;
player.speed.y = cos(player.rotation*DEG2RAD)*PLAYER_SPEED;
// Player logic: acceleration
if (IsKeyDown(KEY_UP))
{
if (player.acceleration < PLAYER_MAX_ACCELERATION) player.acceleration += PLAYER_ACCELERATION;
}
else
{
if (player.acceleration > 0) player.acceleration -= DRAG;
else if (player.acceleration < 0) player.acceleration = 0;
}
if (IsKeyDown(KEY_DOWN))
{
if (player.acceleration > 0) player.acceleration -= PLAYER_ACCELERATION / 2;
else if (player.acceleration < 0) player.acceleration = 0;
}
// Player logic: movement
player.position.x += (player.speed.x * player.acceleration);
player.position.y -= (player.speed.y * player.acceleration);
// Collision logic: player vs walls
if (player.position.x > screenWidth + shipHeight) player.position.x = -(shipHeight);
else if (player.position.x < -(shipHeight)) player.position.x = screenWidth + shipHeight;
if (player.position.y > (screenHeight + shipHeight)) player.position.y = -(shipHeight);
else if (player.position.y < -(shipHeight)) player.position.y = screenHeight + shipHeight;
}
}
else
{
if (IsKeyPressed(KEY_ENTER))
{
InitGame();
gameOver = false;
}
}
}
// Draw game (one frame)
void DrawGame()
{
BeginDrawing();
ClearBackground(RAYWHITE);
if (!gameOver)
{
// Draw player
DrawTexturePro(
playerTexture,
Rectangle {1, 1, (float)playerTexture.width, (float)playerTexture.height},
Rectangle {player.position.x, player.position.y, (float)playerTexture.width * PLAYER_SIZE, (float)playerTexture.height * PLAYER_SIZE},
Vector2 {(float)playerTexture.width * PLAYER_SIZE / 2, (float)playerTexture.height * PLAYER_SIZE / 2},
player.rotation,
WHITE
);
// Draw FPS
DrawText("FPS:", 10, 10, 20, BLACK);
DrawText(std::to_string(GetFPS()).c_str(), MeasureText("FPS:", 20) + 20, 10, 20, GREEN);
// Draw player acceleration
DrawText("Acceleration:", 10, 30, 20, BLACK);
DrawText(std::to_string(player.acceleration).c_str(), MeasureText("Acceleration:", 20) + 20, 30, 20, BLACK);
// Draw player rotation
DrawText("Rotation:", 10, 50, 20, BLACK);
DrawText(std::to_string(player.rotation).c_str(), MeasureText("Rotation:", 20) + 20, 50, 20, BLACK);
}
else
{
DrawText("Game Over!", screenWidth/2 - MeasureText("Game Over!", 30)/2, screenHeight/2 - 30, 30, RED);
DrawText("Press ENTER to restart", screenWidth/2 - MeasureText("Press ENTER to restart", 20)/2, screenHeight/2 + 30, 20, RED);
}
if (!gameOver)
{
if (victory) DrawText("VICTORY", screenWidth/2 - MeasureText("VICTORY", 20)/2, screenHeight/2, 20, LIGHTGRAY);
if (pause) {
DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, Color{150, 150, 150, 255});
}
}
else {
DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
}
EndDrawing();
}
// Unload game variables
void UnloadGame()
{
// TODO: Unload all dynamic loaded data (textures, sounds, models...)
}
// Update and Draw (one frame)
void UpdateDrawFrame()
{
UpdateGame();
DrawGame();
}
Verbose Output (cmake --build . --verbose
) :
/usr/bin/cmake -S/home/d3r1n/Desktop/Projects/AstroX -B/home/d3r1n/Desktop/Projects/AstroX/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/d3r1n/Desktop/Projects/AstroX/build/CMakeFiles /home/d3r1n/Desktop/Projects/AstroX/build//CMakeFiles/progress.marks
/usr/bin/make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
/usr/bin/make -f libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/build.make libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/depend
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
cd /home/d3r1n/Desktop/Projects/AstroX/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX/libs/raylib/src/external/glfw/src /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src /home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/DependInfo.cmake --color=
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/context.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/egl_context.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/glx_context.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/init.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/input.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/linux_joystick.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/monitor.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/osmesa_context.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/posix_thread.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/posix_time.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/vulkan.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/window.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/x11_init.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/x11_monitor.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/x11_window.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/xkb_unicode.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/compiler_depend.internal".
Consolidate compiler generated dependencies of target glfw_objlib
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
/usr/bin/make -f libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/build.make libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/build
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
make[2]: Nothing to be done for 'libs/raylib/src/external/glfw/src/CMakeFiles/glfw_objlib.dir/build'.
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
[ 55%] Built target glfw_objlib
/usr/bin/make -f libs/raylib/src/external/glfw/src/CMakeFiles/glfw.dir/build.make libs/raylib/src/external/glfw/src/CMakeFiles/glfw.dir/depend
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
cd /home/d3r1n/Desktop/Projects/AstroX/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX/libs/raylib/src/external/glfw/src /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src /home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/external/glfw/src/CMakeFiles/glfw.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
/usr/bin/make -f libs/raylib/src/external/glfw/src/CMakeFiles/glfw.dir/build.make libs/raylib/src/external/glfw/src/CMakeFiles/glfw.dir/build
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
make[2]: Nothing to be done for 'libs/raylib/src/external/glfw/src/CMakeFiles/glfw.dir/build'.
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
[ 58%] Built target glfw
/usr/bin/make -f CMakeFiles/custom_button.dir/build.make CMakeFiles/custom_button.dir/depend
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
cd /home/d3r1n/Desktop/Projects/AstroX/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build/CMakeFiles/custom_button.dir/DependInfo.cmake --color=
Dependencies file "CMakeFiles/custom_button.dir/src/custom_button.cpp.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/CMakeFiles/custom_button.dir/compiler_depend.internal".
Consolidate compiler generated dependencies of target custom_button
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
/usr/bin/make -f CMakeFiles/custom_button.dir/build.make CMakeFiles/custom_button.dir/build
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
make[2]: Nothing to be done for 'CMakeFiles/custom_button.dir/build'.
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
[ 65%] Built target custom_button
/usr/bin/make -f libs/raylib/src/CMakeFiles/raylib_static.dir/build.make libs/raylib/src/CMakeFiles/raylib_static.dir/depend
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
cd /home/d3r1n/Desktop/Projects/AstroX/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX/libs/raylib/src /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src /home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/DependInfo.cmake --color=
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/core.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/models.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/raudio.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/shapes.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/text.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/textures.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Dependencies file "libs/raylib/src/CMakeFiles/raylib_static.dir/utils.c.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/libs/raylib/src/CMakeFiles/raylib_static.dir/compiler_depend.internal".
Consolidate compiler generated dependencies of target raylib_static
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
/usr/bin/make -f libs/raylib/src/CMakeFiles/raylib_static.dir/build.make libs/raylib/src/CMakeFiles/raylib_static.dir/build
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
make[2]: Nothing to be done for 'libs/raylib/src/CMakeFiles/raylib_static.dir/build'.
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
[ 93%] Built target raylib_static
/usr/bin/make -f CMakeFiles/AstroX.dir/build.make CMakeFiles/AstroX.dir/depend
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
cd /home/d3r1n/Desktop/Projects/AstroX/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build /home/d3r1n/Desktop/Projects/AstroX/build/CMakeFiles/AstroX.dir/DependInfo.cmake --color=
Dependencies file "CMakeFiles/AstroX.dir/src/main.cpp.o.d" is newer than depends file "/home/d3r1n/Desktop/Projects/AstroX/build/CMakeFiles/AstroX.dir/compiler_depend.internal".
Consolidate compiler generated dependencies of target AstroX
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
/usr/bin/make -f CMakeFiles/AstroX.dir/build.make CMakeFiles/AstroX.dir/build
make[2]: Entering directory '/home/d3r1n/Desktop/Projects/AstroX/build'
[ 96%] Linking CXX executable AstroX
/usr/bin/cmake -E cmake_link_script CMakeFiles/AstroX.dir/link.txt --verbose=1
/usr/bin/c++ -O3 -DNDEBUG -rdynamic CMakeFiles/AstroX.dir/src/main.cpp.o -o AstroX libcustom_button.a libs/raylib/src/libraylib.a libs/raylib/src/external/glfw/src/libglfw3.a -lrt -lm -ldl -lX11 -lpthread -lm -lpthread -lGL -lGLU
/usr/bin/ld: CMakeFiles/AstroX.dir/src/main.cpp.o: in function `_GLOBAL__sub_I_main':
main.cpp:(.text.startup+0xaca): undefined reference to `CustomButton::CustomButton(Vector2, float, Texture2D, char const*, int, Color)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/AstroX.dir/build.make:105: AstroX] Error 1
make[2]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
make[1]: *** [CMakeFiles/Makefile2:153: CMakeFiles/AstroX.dir/all] Error 2
make[1]: Leaving directory '/home/d3r1n/Desktop/Projects/AstroX/build'
make: *** [Makefile:156: all] Error 2