2012-06-10 12 views
6

Tengo un problema con CMake en el que no puedo obtener que mis archivos se agreguen a carpetas/filtros dentro de Visual Studio.Agregar archivos a source_group en CMake

# Add folders to filters 
file(GLOB_RECURSE DATABASE_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/database *.cpp *.h) 
file(GLOB_RECURSE LOG_SRCS   RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/log *.cpp *.h) 
file(GLOB_RECURSE NETWORK_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/network *.cpp *.h) 
file(GLOB_RECURSE THREADING_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/threading *.cpp *.h) 
file(GLOB_RECURSE UTILS_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/utils *.cpp *.h) 

source_group(database FILES ${DATABASE_SRCS}) 
source_group(log  FILES ${LOG_SRCS}) 
source_group(network FILES ${NETWORK_SRCS}) 
source_group(threading FILES ${THREADING_SRCS}) 
source_group(utils  FILES ${UTILS_SRCS}) 

Un problema que podría ser la causa de este problema es que el GLOB_RECURSE 's devolver los archivos que están en ${CMAKE_CURRENT_SOURCE_DIR} pero relativos a la /database (o cualquier otro directorio).

Por ejemplo, hay un archivo en database/ llamado dbcore.cpp. Este archivo se agrega a DATABASE_SRCS como dbcore.cpp, pero los archivos en el directorio principal (es decir, ${CMAKE_CURRENT_SOURCE_DIR}) también se agregan, pero tienen una ruta relativa a database/, como ../common.h.

Otro problema puede ser que, dentro del proyecto de Visual Studio, ya existen los filtros "Header Files" y "Source Files" predeterminados.

Estoy usando CMake 2.8.6 y Visual Studio 11/2012.

Respuesta

8

Para evitar las llamadas file(GLOB_RECURSE... que regresan todos los archivos cada vez, usar algo como:

file(GLOB_RECURSE DATABASE_SRCS 
     RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.h) 

Esto establecerá el valor de DATABASE_SRCS-database/dbcore.cpp;database/dbcore.h;... que debe hacer sus llamadas source_group funcionan correctamente.

Sin embargo, a partir de la documentación para file(GLOB:

Nosotros no recomendamos el uso de GLOB para recopilar una lista de archivos de origen de árbol de código fuente. Si ningún archivo CMakeLists.txt cambia cuando se agrega o elimina una fuente , el sistema de compilación generado no puede saber cuándo solicitar a CMake que se regenere.

Para ver los detalles completos, ejecute

cmake --help-command file 

La forma recomendada comúnmente para listar los archivos de proyecto es añadirlos a mano para el CMakeLists.txt.

Para responder a su último problema, si los "Archivos de encabezado" y "Archivos de origen" predeterminados de Visual Studio están vacíos (es decir, todos los archivos aparecen en otras carpetas), no aparecen. La presencia de estos valores predeterminados no afecta a las carpetas creadas con source_group.

Cuestiones relacionadas