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 ++.
Спасибо за ваш ответ. Он работал на виртуальную коробку linux mint. Я еще не пытался с ноутбуком. Но я только попробовал первый вариант. В чем проблемы с включением предварительно построенных библиотек? RIght теперь я читаю о add_subdirectory, снова спасибо за ваш ответ – WalterCapa
Скомпилированные объекты, а также библиотеки создаются для определенной платформы. Простым примером является то, что библиотека, скомпилированная для 64-битной архитектуры, не будет работать на 32-битной. Библиотека для ARM не будет работать на i386-PC. Версия glibc-ABI может отличаться. Чтобы назвать некоторые причины. –
Я видел из вашей репутации, что вы новичок в SO. Пожалуйста, не забывайте поднимать и принимать ответ, как только сможете. Добро пожаловать в SO. –