Felipe Lucio


CMakeLists simples e direto

Escrito em 2024-08-18

Tenho uma dificuldade imensa em iniciar projetos no CMake.
Sempre é um parto me entender com a DSL confusa dele.
Pensando nisso, resolvi deixar esse CMakeLists simples para meu eu do futuro (boa sorte, camarada!).

Disclaimer

Esse é um CMakeLists para iniciar um projeto de aplicação simples (ou seja, não serve para libs ou qualquer coisa para uso "público").
A ideia é usar ao máximo o sistema de download automático de dependências do próprio CMake (FetchContent).
As definições de constantes são feitas no src/config.h.in
Não gosto de usar o esquema de BLOB para adicionar os .c/.h de modo "automático". É só adicionar os arquivos desejados no add_executable.

TODO

O Código

cmake_minimum_required(VERSION 3.27)
project(nome_do_projeto)

set(ENGINE_ROOT_DIR ${CMAKE_SOURCE_DIR})
configure_file(src/config.h.in src/config.h)
include_directories(${CMAKE_BINARY_DIR}/src)

add_executable(${PROJECT_NAME}
    src/main.c
)

# DEPENDENCIES
include(FetchContent)
find_package(OpenGL REQUIRED)

FetchContent_Declare(
        SDL2
        GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
        GIT_TAG release-2.30.6
        GIT_SHALLOW TRUE
        GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(SDL2)

FetchContent_Declare(
    cglm
    GIT_REPOSITORY https://github.com/recp/cglm.git
    GIT_TAG v0.9.4
)
FetchContent_MakeAvailable(cglm)

target_link_libraries(${PROJECT_NAME} PRIVATE opengl32 cglm SDL2::SDL2main SDL2::SDL2)