2011-08-17 12 views
7

Estoy teniendo un pequeño problema con CMake con respecto a la organización de mi código dentro de una solución. Tengo el hábito de organizar mi espacio de nombres creando un directorio para cada uno. Por ejemplo, si puedo crear algo como esto:¿Cómo organizar mis archivos usando CMake?

namespace test { namespace blabla { ... } } 

me gustaría crear una prueba de directorio y dentro de ella un directorio de blabla, sin embargo CMake no hacerlos aparecer en mi Visual Studio o proyecto de Xcode.

¿Hay algún truco para hacerlo?

+0

¿Qué desea que aparezca en su proyecto? ¿Los archivos? las carpetas? – Philipp

+0

Las carpetas y los archivos dentro de ellos. – lollancf37

+0

y (¿cómo) trataste de agregarlos? – Philipp

Respuesta

11

Intente utilizar el comando source_group. Después de la llamada a add_executable añadir source_group declaraciones a estructurar su proyecto como desee, por ejemplo .:

source_group("test\\blabla" FILES file1.cpp file2.cpp) 
+0

¡Parece hacer el truco! Gracias. Sin embargo, acabo de obtener la carpeta "blabla" y no una carpeta "prueba" con blabla en él. Alguna idea ? – lollancf37

+0

Los grupos de origen anidados (utilizando barras diagonales inversas) funcionan para mí con CMake 2.8.5 y Visual Studio 2008 Pro. – sakra

+0

No he probado aún en vs pero Xcode. Te mantendré informado. Gracias de nuevo ! – lollancf37

2

Para Visual Studio: Asegúrese de que todos los nombres de archivo son únicos. El resultado de compilar dir/file.cpp será obj/file.obj. Cuando el compilador compila otherdir/file.cpp, el resultado será obj/file.obj - se sobrescribirá el archivo de objeto anterior . Este es el caso en VS 2008 y versiones anteriores, y sospecho que todavía es el caso en VS 2010.

Yo también organizo el código fuente de la forma en que lo hace. Terminé usando el siguiente esquema de nombres: si la ruta al archivo fuente fuera Dir/Subdir/AnotherSubDir/File.cpp, entonces nombraría el archivo Dir/Subdir/AnotherSubdir/DirSubdirAnotherSubdirFile.cpp. ¿Feo? Sí. Pero es mejor que un proyecto que no se enlazará, y es fácil averiguar cuál debería ser el nombre del archivo. Supongo que podrías agregar un número de secuencia en el archivo, pero pensé que sería más feo. Además, si olvida hacer que el nombre del archivo sea único, el error no es tan obvio de detectar. Especialmente cuando estás cansado, y su novio/esposa está esperando ...

+0

Entiendo lo que dices, pero no tuve este problema, pero lo tendré en cuenta, ya que lo más probable es que suceda. Gracias – lollancf37

+0

Perdón por estar un poco fuera del tema, pero pensé que debería darte un aviso. ¡Aclamaciones! –

4

para agrupar proyectos de VS que podría utilizar de esta manera en CMake (ver después 2.8.3)

//turn on using solution folders 
set_property(GLOBAL PROPERTY USE_FOLDERS ON) 

//add test projects under 1 folder 'Test-projects' 
FOREACH(TEST ${TESTS_LIST}) 
    add_test(NAME ${TEST} COMMAND $<TARGET_FILE:${TEST}>) 
    set_tests_properties(${TEST} PROPERTIES TIMEOUT 1) 
    set_property(TARGET ${TEST} PROPERTY FOLDER "Test-projects") 
ENDFOREACH(TEST) 
+0

pequeña nota lateral: Visual Studio Express no es compatible con carpetas por eso USE_FOLDERS tiene que ser configurado en primer lugar – Infinite

-2

La solución aceptada no funciona para Xcode como de Xcode 6. sin embargo, hay una solución sencilla:

  1. suprimir las referencias a los archivos de origen de su proyecto de Xcode (eliminarlos en la barra lateral, a continuación, elegir "Eliminar de referencia").
  2. Agregue las carpetas raíz de nuevo, asegúrese de que "Crear grupo" esté marcado y seleccione el (los) destino (s) deseado (s).

Tada! Ahora sus archivos deben coincidir con la estructura de carpetas en Finder.

Cuestiones relacionadas