2011-11-29 14 views
29

estoy tratando de establecer un proyecto de prueba el aspecto de mi propio proyecto, para simplemente cosas de trabajo primero y se ve así:CMake con incluir y rutas de origen - Configuración básica

/MainProject/inc/main.h 
/MainProject/src/main.cpp 
/LibProject/inc/test.h 
/LibProject/src/test.cpp 

que he encontrado algunos tutoriales, pero no puedo averiguar cómo configurar esto cuando tengo la carpeta inc y src? ¿Cómo se verían los archivos CMakeLists.txt? ¿Tendría uno en /, uno en cada una de las carpetas del proyecto? Parece que no necesito tener uno en las carpetas inc y src?

Respuesta

59

Necesita un CMakeLists.txt para cada subdirectorio fuente. Su estructura debe ser algo como esto:

root 
|-MainProject 
| |-inc 
| | '-main.h 
| |-src 
| | |-main.cpp 
| | '-CMakeLists.txt 
| '-CMakeLists.txt 
|-LibProject 
| |-inc 
| | '-test.h 
| |-src 
| | |-test.cpp 
| | '-CMakeLists.txt 
| '-CMakeLists.txt 
'-CMakeLists.txt 

contenido de root/CMakeLists.txt:

project(MyProject) 
subdirs(MainProject LibProject) 

contenido de LibProject/CMakeLists.txt y MainProject/CMakeLists.txt:

subdirs(src) 

contenido de LibProject/src/CMakeLists.txt:

# Notice name prefix of this variable, set by CMake according 
# to value given with "project()" in the root CMakeLists.txt. 
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject test.cpp) 

contenido de MainProject/src/CMakeLists.txt:

include_directories(${MyProject_SOURCE_DIR}/MainProject/inc) 
# I assume you want to use LibProject as a library in MainProject. 
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc) 
link_directories(${MyProject_SOURCE_DIR}/LibProject/src) 
add_executable(MainProject main.cpp) 
target_link_libraries(MainProject LibProject) 

A continuación, configurar y construir con:

$ cd root 
$ mkdir build 
$ cd build 
$ cmake .. 
$ make 
+8

El punto no era copiar su respuesta, sino completarla. Por lo que sé, no funcionaría sin los dos 'CMakeLists.txt's faltantes y el comando' link_directories() 'faltante. Inicialmente tenía la intención de comentar tu respuesta, pero mi reputación es demasiado baja para hacer eso. Así que pensé que publicar una segunda respuesta sería la manera más autosuficiente. No fue para ofenderte. –

+0

Debe funcionar sin link_directories ya que es una biblioteca creada por el mismo proyecto. En cuanto al problema del camino, tienes razón, lo corregiré. – Beginner

+0

Aah cool ok ... gracias – bitgregor

18

Podrías hacerlo de la siguiente manera.

  • CMakeLists.txt en su directorio MainProject:

    project(MainProject) 
    
    add_subdirectory(LibProject/src) 
    add_subdirectory(MainProject/src) 
    
  • CMakeLists.txt en su LibProject directorio/src:

    include_directories(${PROJECT_SRC_DIR}/LibProject/inc/) 
    add_library(LibProject test.cpp) 
    
  • CMakeLists.txt en su MainProject directorio/src :

    include_directories(${PROJECT_SRC_DIR}/MainProject/inc/) 
    add_executable(MainProject main.cpp) 
    target_link_libraries(MainProject LibProject) 
    
+3

¿Puedo preguntar por qué tiene usted '$ {}' PROJECT_SRC_DIR? Obtuve un error de CMake y tuve que corregir la variable de la siguiente manera: '$ {PROJECT_SOURCE_DIR}' para que funcione – nakajuice

+1

de acuerdo con la documentación, debe ser PROJECT_SOURCE_DIR. Puede encontrar los detalles aquí: https://cmake.org/Wiki/CMake_Useful_Variables – wasabi

Cuestiones relacionadas