2014-01-12 3 views
1

EDIT: Если вы хотите посмотреть на код, здесь: https://github.com/WalterCapa/PercolationCpp/tree/masterя не могу запустить программу, которая использует allegro5 с CMake

Я делаю программу, которая использует allegro5 библиотеку для генерации анимация. Поскольку я хочу избежать установки библиотеки на каждом компьютере, использующем программу, я попытался вставить заголовки и .so-файлы в директорию проекта. Таким образом, дерево, как это:

корень

include 
    allegro5 <- (Dir where the headers of allegro are) 
    Percolation.h 
    QuickUnion.h 

lib 
    allegro5 <-(Dir where the .so files are) 
    Percolation.cpp 
    QuickUnion.cpp 

PercolationVisualizer <- (Dir that has the main) 

Проблема заключается в следующем. I установлен allegro5 в моем компьютере с LinuxMint 13. Все в порядке, если я компилирую из Code :: Blocks или если я делаю это с терминала, используя -I, чтобы вызвать hedaers и -L, чтобы указать, где находятся .so-файлы, и даже с помощью CMake работает отлично, но когда я пытаюсь сделать это на другом компьютере, даже если это окна, как мой ноутбук или виртуальную машину с LinuxMint, он генерирует сообщение об ошибке:

make[2]: *** No rule to make target '/./lib/allegro5/liballegro.so/', needed by' 
../bin/PercolationVisualizer'. Stop. 
make[1]: *** [CMakeFiles/PercolationVisualizer.dir/all] Error 2 
make: *** [all] Error 2 

Это мой CMakeLists.txt :

cmake_minimum_required(VERSION 2.8.7) 
    project(PercolationCpp) 

    set(PercolationCpp_VERSION_MAJOR 0) 
    set(PercolationCpp_VERSION_MINOR 1) 

    set(EXECUTABLE_OUTPUT_PATH ../bin/) 

    set(percolation_SRCS PercolationVisualizer/PercolationVisualizer.cpp lib/Percolation.cpp lib/QuickUnion.cpp) 

    #Executable 
    add_executable(PercolationVisualizer ${percolation_SRCS}) 

    #include Allegro 
    include_directories(./include) 
    link_directories(./lib/allegro5) 
    #connect all the libraries 
    set(allegro5_LIBS /./lib/allegro5/liballegro.so /./lib/allegro5/liballegro_primitives.so) 

    target_link_libraries(PercolationVisualizer ${allegro5_LIBS}) 

Btw, при попытке его окон с MinGW я использовал CMake -G "MinGW Makefiles" .. и mingw32-мейкера. Он нашел, что компилятор и cmake работали, но когда я попробовал второй, он дал мне ту же ошибку. На моем рабочем столе я компилирую с помощью g ++.

ответ

0

Я думаю, что ваша текущая проблема в этой строке ведущий /:

set(allegro5_LIBS /./lib/allegro5/liballegro.so /./lib/allegro5/liballegro_primitives.so) 

Ведущий слэш покажет cmake искать абсолютный путь (например,/USR/Lib ...), а не приставкой это с CMAKE_*_DIR. Попробуйте это

set(allegro5_LIBS ${CMAKE_SOURCE_DIR}/lib/allegro5/liballegro.so ${CMAKE_SOURCE_DIR}/lib/allegro5/liballegro_primitives.so) 

Однако я решительно препятствую вам включать в проект готовые библиотеки. Если вы можете, интегрируйте tar-ball или git-подмодуль. Если проект, который вы включаете, является самим проектом cmake, простой вызов add_subdirectory сделает цели (библиотеки) доступными для вашего проекта и создаст зависимость. Если проект основан на configure, вы можете использовать расширение ExternalProject.

+0

Спасибо за ваш ответ. Он работал на виртуальную коробку linux mint. Я еще не пытался с ноутбуком. Но я только попробовал первый вариант. В чем проблемы с включением предварительно построенных библиотек? RIght теперь я читаю о add_subdirectory, снова спасибо за ваш ответ – WalterCapa

+0

Скомпилированные объекты, а также библиотеки создаются для определенной платформы. Простым примером является то, что библиотека, скомпилированная для 64-битной архитектуры, не будет работать на 32-битной. Библиотека для ARM не будет работать на i386-PC. Версия glibc-ABI может отличаться. Чтобы назвать некоторые причины. –

+0

Я видел из вашей репутации, что вы новичок в SO. Пожалуйста, не забывайте поднимать и принимать ответ, как только сможете. Добро пожаловать в SO. –

Смежные вопросы