2014-10-01 7 views
6

Sto usando LLVM/Clang nel mio progetto C++. Posso costruire ed eseguire tutto bene con un Makefile.Aggiunta di LLVM al mio progetto Cmake: Perché ci sono percorsi codificati nel file Cmake di LLVM?

Ora sto cercando di passare a Cmake e non riesco a far funzionare le cose. Lascia che ti spieghi cosa ho fatto.

Sto seguendo questo tutorial:

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

Un frammento di pertinenza da tale pagina web è:

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

Grande! Vado a scaricare LLVM 3.5 e dovrei essere a posto. Sono andato alla pagina di download:

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

e scaricato i binari precompilati per Clang per Ubuntu 14.04 Linux.

Poi, ho aggiunto il seguente al mio CMakeLists.txt lima:

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) 

(Questo è lo stesso come il tutorial, tranne che ho impostato LLVM_DIR dal momento che è attualmente in una posizione non-standard.)

Quando eseguo cmake, ottengo il seguente errore:

[[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) 

Così cmake sembra trovare il file cmake di LLVM, ma cmake si lamenta di un percorso che inizia con /home/ben/.

Infatti, sembra che il file LLVMConfig.cmake di LLVM presenti alcuni percorsi assoluti che non sono rilevanti per la mia macchina. Per esempio:

[[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) 

Chi è ben e che cosa sta facendo in questo file? Si presenta in pochi altri posti:

[[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") 

Inutile dire che questi percorsi non esistono sulla mia macchina. Sono confuso sul motivo per cui questi file hanno questi percorsi in loro? Devo eseguire uno strumento o qualcosa per cambiare questi percorsi per la mia macchina? O devo cambiarli tutti manualmente?

EDIT: Per curiosità, ho cambiato manualmente tutti quei percorsi per puntare a percorsi sulla mia macchina:

[[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' * 

Dopo di che, cmake non è più lamentato e la mia generazione ha proceduto.

Vorrei ancora sapere perché ho avuto bisogno di farlo.

+1

credo che scrivere un FindLlvm.cmake basato su 'llvm-config' per un out-of-source dovrebbe andare bene; e l'unica preoccupazione è che dovresti passare il percorso di 'llvm-config' –

risposta

2

Sembra un bug LLVM. Sentitevi liberi di inserirlo: http://llvm.org/bugs

+0

Probabilmente hai ragione. Ho presentato un errore: http://llvm.org/bugs/show_bug.cgi?id = 21121 – stepthom