2010-09-28 12 views
10

He estado buscando en Google por un tiempo y todavía no me han resultado, así que me dirijo a ustedes ^^ Estoy tratando de usar CMake para compilar mi proyecto C++ y tengo un problema en el encabezado caminos.CMake y rutas de cabecera absolutas

Como uso muchas clases organizadas en varios directorios, todas mis sentencias include tienen rutas absolutas (por lo que no es necesario usar "../../") pero cuando intento generar CMake-generated Makefile simplemente no funciona.

¿Alguien sabe cómo especificar en CMakeLists.txt que todas las inclusiones son con rutas absolutas? Muchas gracias de antemano.


Mi salida al intentar hacer

~/multiboost/BanditsLS/GenericBanditAlgorithmLS.h:45:25: Utils/Utils.h: No such file or directory
~/multiboost/BanditsLS/GenericBanditAlgorithmLS.h:46:35: Utils/StreamTokenizer.h: No such file or directory

Mi archivo CMakeLists.txt:

#The following command allows the use of the "file" command 
cmake_minimum_required(VERSION 2.6) 

#The declaration of the project 
project(multiboost) 

#This allows recursive parsing of the source files 
file(
    GLOB_RECURSE 
    source_files 
    * 
    ) 
list(REMOVE_ITEM source_files ./build/*) 

#This indicates the target (the executable) 
add_executable(
    multiboost 
    ${source_files} #EXCLUDE_FROM_ALL build/ 
    ) 
+1

puede que prvodie un pequeño ejemplo (source/header/cmake)? también, los caminos absolutos son generalmente una mala idea. La mejor manera de hacerlo es, por ejemplo, la manera en que lo hace: especificar una sola raíz que esté en la ruta de inclusión del compilador y comenzar desde allí. – stijn

+0

Sí exactamente, esto es lo que estoy haciendo: digamos que tengo un src/dir que contiene todos los subdires de la fuente así como también el archivo principal. En todas mis declaraciones include, solo tengo que especificar la ruta desde src /. En mi proyecto de XCode, funciona bien, pero no descubrí cómo hacerlo en CMake. (Gracias por su respuesta; o)) – Archy

+0

sí, pero aún necesitamos un ejemplo + más información ('simplemente no funciona' es tan críptico como puede ser una descripción del error, no nos dice nada en absoluto) – stijn

Respuesta

12

se necesita algo como esto en CMakeLists.txt:

SET(BASEPATH "${CMAKE_SOURCE_DIR}") 
INCLUDE_DIRECTORIES("${BASEPATH}") 
+0

¡Agradable! Creo que esto es exactamente lo que faltaba (var BASEPATH) Gracias fschmitt! – Archy

5

establezca la ruta correcta: supongamos que el directorio está en Utilidades/exp/appstat/benbou/multiboost, luego cmake (bueno, en realidad, gcc) tiene que saber esto:

include_directories(/exp/appstat/benbou/multiboost) 

o podría ser más conveniente para pasar esto como una opción que se pasa en la línea de comandos:

include_directories(${MyProjectRoot}) 

cmake -DMyProjectRoot=/exp/appstat/benbou/multiboost  
+1

Gracias stjin. Por cierto, el archivo de configuración CMake debe ser independiente de la plataforma, se puede hacer con las sentencias IF de Sone. ¡Buena suerte! – Archy

Cuestiones relacionadas