2011-11-29 17 views
8

Estoy configurando cmake para mi proyecto y he configurado un proyecto de prueba para él. Cuando genera mi proyecto visual studio 2010, quiero hacerlo como el proyecto que tuve antes.Especifique cómo cmake crea el proyecto de estudio visual

  • crea un proyecto ALL_BUILD y ZERO_CHECK que no quiero.
  • pone los archivos .h en la carpeta Dependencias Externas. Quiero una carpeta Incluir archivos donde vayan todos los archivos .h.
  • También quiero agrupar algunos archivos bajo diferentes filtros. Al igual que en mi biblioteca principal, quiero agrupar todos los archivos relacionados con Matemáticas en una carpeta y todos los archivos relacionados con la Gestión de eventos en otra.
  • En el sistema de archivos, coloca los archivos del proyecto dentro de/Lib/src. Probablemente porque lo tengo organizado en la carpeta del código, pero no quiero eso para los archivos del proyecto.
  • Quiero configurar diferentes configuraciones, así que tengo DebugOpenGL, DebugDirectX, ReleaseOpenGL, ReleaseDirectX y luego establezco un flag USE_OPENGL o USE_DIRECTX para los dos tipos de configuraciones.

¿Cómo puedo excluir algunos archivos cuando construyo en Windows y otros cuando construyo en Linux? Al igual que tengo WindowWin.cpp y WindowLinux.cpp.


He intentado lo que sugested pero no puede hacerlo funcionar:

#LibProject/src 

FILE(GLOB test0_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test.h) 
source_group(include0 FILES ${test0_headers}) 
FILE(GLOB test0_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(source0 FILES ${test0_source}) 

FILE(GLOB test1_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test1.h) 
source_group(include1 FILES ${test1_headers}) 
FILE(GLOB test1_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test1.cpp) 
source_group(source1 FILES ${test1_source}) 

include_directories(${test0_headers} ${test1_headers}) 

add_library(LibProject ${test0_headers} ${test1_headers} ${test0_source} ${test 
1_source}) 

Yo como que tengo trabajo ahora .. sólo eso quiero subcarpetas para encabezados y archivos de origen dentro del grupo fuente.

set(test_source0 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(TEST FILES ${test_source0}) 

set(test_source1 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2 FILES ${test_source1}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject ${test_source0} ${test_source1}) 

Aquí está mi solución :)

set(test_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h) 
set(test_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 

source_group(TEST\\Headers FILES ${test_header}) 
source_group(TEST\\Source FILES ${test_source}) 

set(test2_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h) 
set(test2_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2\\Headers FILES ${test2_header}) 
source_group(TEST2\\Source FILES ${test2_source}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 

add_library(LibProject 
${test_header} 
${test_source} 
${test2_header} 
${test2_source}) 
+0

Mire http://stackoverflow.com/questions/27175754/what-are-all-build-and-zero-check-and-do-i-need-them para ver qué ZERO_CHECK y ALL_BUILD son. – sashoalm

Respuesta

7

Para agrupar archivos en una carpeta en Visual Studio se puede utilizar:

# Include files 
FILE(GLOB all_headers "include/*.h*") 
source_group("include" FILES ${all_headers}) 

# Source files 
FILE(GLOB all_srcs "src/*.cpp") 
source_group("source" FILES ${all_srcs}) 

Esto pondrá todos sus archivos .h que se encuentran en la carpeta de incluir a aparecer en una carpeta llamada incluyen en Visual Studio . Lo mismo para sus archivos cpp. Puede usar esta técnica para hacer su propia estructura en CMake, si eso es lo que quiere.

Para fines de ALL_BUILD y ZERO_CHECK, lea this answer. Para deshabilitar la generación de ZERO_CHECK, use set(CMAKE_SUPPRESS_REGENERATION true).

Para seleccionar entre OpenGL y DirectX y configurar las carpetas adecuadas, puede utilizar la misma técnica utilizada anteriormente, pero ponerlos dentro de un

if(${USE_OPENGL}) 
    FILE(GLOB ....) 
endif() 

creo que usted consigue la idea.

+2

Sin embargo, el uso de GLOB probablemente no sea la mejor idea, ya que no proporciona un error si faltan archivos que son cruciales para el proyecto. Si enumera todos los archivos de forma manual (muchos tipeos lo sé), CMake se quejará si no puede encontrar un archivo listado. – LiMuBei

+0

para deshacerse de ZERO_CHECK puede pasar la opción -DCMAKE_SUPPRESS_REGENERATION = 0 para hacer una línea de comando. – davidnr

4

Voy a responder a los que conozco:

El ALL_BUILD y ZERO_CHECK se utilizan para mantener sus proyectos en sincronía con los cambios a los CMakeFiles. No creo que haya una manera de deshacerse de ellos.

Para obtener los archivos .h donde los desee, debe incluirlos como parte de la fuente. Utilizo algo como esto:

file(GLOB LocalProjectIncludes "${yourheaderdirectory}/*.h") 

Luego añado $ {} LocalProjectIncludes a los archivos de origen para el proyecto. CMake descubrirá que son encabezados; no intentará construirlos.

Cuestiones relacionadas