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ć.
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' –