es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    cmake_minimum_required(VERSION 3.22.1)
    
    project(Project)
    
    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})
    
    # Agregar filtros para archivos de código fuente y encabezado
    source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SOURCES} ${HEADERS})
    

    El comando source_group crea filtros basados en la estructura de directorios de tus archivos de código fuente y encabezado. El argumento TREE 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 argumento FILES 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.

Comments are closed.