2010-09-28 21 views
10

Byłem googling przez chwilę i nie mam jeszcze wyniku, więc zwracam się do was chłopaki^^ Próbuję użyć CMake do budowania mojego projektu C++ i mam problem w nagłówku ścieżki.Ścieżki nagłówka CMU i bezwzględne

Ponieważ używam wielu klas zorganizowanych w kilku katalogach, wszystkie moje instrukcje include są z absolutnymi ścieżkami (więc nie trzeba używać "../../"), ale kiedy próbuję zrobić wygenerowany CMake Makefile to po prostu nie działa.

Czy ktoś wie, jak określić w CMakeLists.txt, że wszystkie załączniki są z absolutnymi ścieżkami? Dziękuję bardzo z góry.


moje wyjście, gdy próbuje zrobić

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

Mój plik 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

można prvodie mały przykład (źródło/nagłówek/cmake)? również absolutne ścieżki są generalnie złym pomysłem. Najmilszym sposobem na zrobienie tego jest na przykład na przykład doładowanie: określ jeden root znajdujący się w ścieżce dołączania z kompilatora i zacznij od tego. – stijn

+0

Tak, dokładnie to, co robię: Załóżmy, że mam katalog src/dir, który zawiera wszystkie podkatalogi źródła, a także główny plik. We wszystkich moich instrukcjach dołączania muszę podać tylko ścieżkę od src /. W moim projekcie XCode działa dobrze, ale nie wymyśliłem jeszcze, jak zrobić to w CMake. (Dzięki za odpowiedź; o)) – Archy

+0

tak, ale nadal potrzebujemy przykładu + więcej informacji ("to po prostu nie działa" jest tak tajemnicze, jak opis błędu może się pojawić, nic nam nie mówi) – stijn

Odpowiedz

12

trzeba coś takiego w CMakeLists.txt:

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

Nice! Myślę, że właśnie tego brakowało (BASEPATH var) Dzięki fschmitt! – Archy

5

ustawiona prawidłowa zawierać ścieżkę: załóżmy katalogiem Utils jest w/exp/appstat/benbou/multiboost, a następnie cmake (dobrze faktycznie, gcc) musi to wiedzieć:

include_directories(/exp/appstat/benbou/multiboost) 

lub może to być wygodniejsze przekazać taką opcję, która jest przekazywana w wierszu poleceń:

include_directories(${MyProjectRoot}) 

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

Dzięki Stjin. Btw, plik konfiguracyjny CMake musi być niezależny od platformy, można to zrobić za pomocą instrukcji Sone IF. Powodzenia! – Archy

Powiązane problemy