2014-10-01 9 views
6

Używam LLVM/Clang w moim projekcie C++. Mogę wszystko dobrze skompilować i uruchomić z plikiem Makefile.Dodawanie LLVM do mojego projektu Cmake: Dlaczego istnieją stałe ścieżki w pliku Cmake LLVM?

Teraz próbuję przenieść się do Cmake i nie mogę sprawić, żeby coś działało. Pozwól mi wyjaśnić, co zrobiłem.

Obserwuję ten tutorial:

http://llvm.org/docs/CMake.html#embedding

Stosowny fragment z tej strony jest:

From LLVM 3.5 onwards both the CMake and autoconf/Makefile build systems export LLVM libraries as importable CMake targets.

Great! Pójdę pobrać LLVM 3.5 i powinienem być dobry. Poszedłem do strony pobierania:

http://llvm.org/releases/download.html

i pobrać wstępnie zbudowane pliki binarne dla Clang dla Ubuntu 14.04 Linux.

Potem dodaje następujące do mojego CMakeLists.txt pliku:

find_path (LLVM_DIR LLVM-Config.cmake 
    /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake 
     ) 
message(STATUS "LLVM_DIR = ${LLVM_DIR}") 
find_package(LLVM REQUIRED CONFIG) 

(To jest taka sama jak tutorial, z wyjątkiem ustawić LLVM_DIR ponieważ jest obecnie w niestandardowym miejscu.)

Kiedy biegnę cmake, pojawia się następujący błąd:

[[email protected]:/path/to/project/build (develop)] $ cmake .. 
-- LLVM_DIR = /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake 
CMake Error at /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake/LLVMConfig.cmake:50 (include): 
    include could not find load file: 

    /home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake/LLVMExports.cmake 
Call Stack (most recent call first): 
    CMakeLists.txt:14 (find_package) 


CMake Error at /home/dev/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake/LLVMConfig.cmake:53 (include): 
    include could not find load file: 

    /home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake/LLVM-Config.cmake 
Call Stack (most recent call first): 
    CMakeLists.txt:14 (find_package) 

Więc cUpewnij wydaje się być znalezienie pliku LLVM za cUpewnij, ale cUpewnij narzeka na pewną ścieżkę zaczynającą się od /home/ben/.

Rzeczywiście, wygląda na to, że plik LLVM LLVMConfig.cmake ma pewne bezwzględne ścieżki, które nie są istotne dla mojego komputera. Na przykład:

[[email protected]:~/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu ] $ head ./share/llvm/cmake/LLVMConfig.cmake 
# This file provides information and services to the final user. 

set(LLVM_INSTALL_PREFIX "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install") 

set(LLVM_VERSION_MAJOR 3) 
set(LLVM_VERSION_MINOR 5) 
set(LLVM_VERSION_PATCH 0) 
set(LLVM_PACKAGE_VERSION 3.5.0) 

set(LLVM_COMMON_DEPENDS) 

Kto ben i co on robi w tym pliku? Pojawia się w kilku innych miejscach:

[[email protected]:~/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu ] $ grep ben ./share/llvm/cmake/LLVMConfig.cmake 
set(LLVM_INSTALL_PREFIX "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install") 
set(LLVM_INCLUDE_DIRS "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/include") 
set(LLVM_LIBRARY_DIRS "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/lib") 
set(LLVM_CMAKE_DIR "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/share/llvm/cmake") 
set(LLVM_TOOLS_BINARY_DIR "/home/ben/development/llvm/3.5/final/Phase3/Release/llvmCore-3.5.0-final.install/bin") 

Nie trzeba dodawać, że te ścieżki nie istnieją na moim komputerze. Nie rozumiem, dlaczego te pliki zawierają w sobie te ścieżki? Czy mam uruchomić narzędzie lub coś, co zmieni te ścieżki dla mojego komputera? Czy muszę je wszystkie ręcznie zmienić?

EDIT: Z ciekawości, ja ręcznie zmienione wszystkie te ścieżki zwrócić do ścieżek na moim komputerze:

[[email protected]:~/Downloads/clang+llvm-3.5.0-x86_64-linux-gnu/share/llvm/cmake ] $ sed -i -e's/.home.ben.development.llvm.3.5.final.Phase3.Release.llvmCore-3.5.0-final.install/\/home\/dev\/Downloads\/clang+llvm-3.5.0-x86_64-linux-gnu/g' * 

Po tym, CUpewnij nie skarżył i mój build przystąpił.

Wciąż chciałbym wiedzieć, dlaczego musiałem to zrobić.

+1

Wierzę, że napisanie FindLlvm.cmake na podstawie 'llvm-config' dla out-of-source powinno być w porządku; a jedynym problemem jest to, że powinieneś przekazać ścieżkę 'llvm-config' –

Odpowiedz

Powiązane problemy