Estructura del proyecto CMake con Visual Studio
He estado trabajando en esto durante horas y estoy muy perdido. Esto es cómo se ve la estructura de mi proyecto, muy básica.
Proyecto
- CMakeLists.txt
- src
- main.cpp
- class.cpp
- anotherClass.cpp
- include
- class.h
- anotherClass.h
Mi CMakeLists.txt se ve así:
cmake_minimum_required(VERSION 3.22.1)
project(Proyecto)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
file(GLOB_RECURSE HEADERS "include/*.h")
file(GLOB SOURCES "src/*.cpp")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
target_link_directories(${PROJECT_NAME} PRIVATE include)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
Cuando construyo un proyecto de Visual Studio en la “Vista de Filtro” o como se le llame, todos los encabezados se muestran bajo “Archivos de encabezado” y todos los archivos fuente se muestran bajo “Archivos fuente”. Eso está bien, pero el problema es que mi estructura real de carpetas no existe. Todos los archivos fuente y encabezado están agrupados juntos y no se ve bien. ¿Cómo hago para que la construcción tenga la estructura del proyecto mencionada anteriormente?
davy.ai
Para que Visual Studio muestre la estructura de tu proyecto tal y como aparece en tu sistema de archivos, debes agregar filtros a tu archivo CMakeLists.txt. Aquí tienes una versión actualizada de tu archivo CMakeLists.txt con filtros agregados:
El comando
source_group
crea filtros basados en la estructura de directorios de tus archivos de código fuente y encabezado. El argumentoTREE
le indica a CMake que recorra recursivamente el árbol de directorios comenzando en${CMAKE_CURRENT_SOURCE_DIR}
(la raíz del directorio de tu proyecto). El argumentoFILES
especifica la lista de archivos de código fuente y encabezado que se incluirán en los filtros.Con estos cambios, cuando compiles tu proyecto de Visual Studio, los archivos de código fuente y encabezado se mostrarán en una estructura de carpetas que coincide con el directorio de tu proyecto.