2010-09-28 37 views
10

Sono stato su Google per un po 'e non ho ancora ottenuto risultati quindi mi rivolgo a voi ragazzi ^^ Sto cercando di utilizzare CMake per creare il mio progetto C++ e ho un problema nell'intestazione percorsi.CMake e percorsi di intestazione assoluti

Poiché utilizzo molte classi organizzate in più directory, tutte le mie istruzioni di inclusione sono con percorsi assoluti (quindi non è necessario utilizzare "../../") ma quando si tenta di rendere generato il CMake Makefile semplicemente non funziona.

Qualcuno sa come specificare in CMakeLists.txt che tutti gli include sono con percorsi assoluti? Grazie mille in anticipo.


La mia uscita quando si cerca di fare

~/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

Il mio file 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

si può prvodie un piccolo esempio (fonte/header/cmake)? inoltre, i percorsi assoluti sono generalmente una cattiva idea. Il modo migliore per farlo è il modo in cui, ad esempio, boost lo fa: specifica una singola radice che si trova nel percorso di inclusione dal compilatore e inizia da lì. – stijn

+0

Sì esattamente, questo è quello che sto facendo: dire che ho un src/dir che contiene tutti i sottodirectory del sorgente e il file principale. In tutte le mie istruzioni include, devo solo specificare il percorso da src /. Nel mio progetto XCode, funziona bene ma non ho ancora capito come realizzarlo in CMake. (Grazie per la tua risposta; o)) – Archy

+0

sì, ma abbiamo ancora bisogno di un esempio + ulteriori informazioni ('semplicemente non funziona' è così criptico come può ottenere una descrizione di errore, non ci dice nulla) – stijn

risposta

12

avete bisogno di qualcosa di simile in CMakeLists.txt:

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

Bello! Penso che questo sia esattamente ciò che mancava (il BASEPATH var) Grazie fschmitt! – Archy

5

impostare il corretto percorso di inclusione: si supponga che il directory Utils è in/exp/appstat/benbou/multiboost, quindi cmake (beh, in realtà, gcc) deve sapere questo:

include_directories(/exp/appstat/benbou/multiboost) 

o potrebbe essere più conveniente per passare questo come una scelta che è passato sulla riga di comando:

include_directories(${MyProjectRoot}) 

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

Grazie stjin. Btw, il file di configurazione di CMake deve essere indipendente dalla piattaforma, può essere fatto con istruzioni IF sole. In bocca al lupo! – Archy

Problemi correlati