我无法运行使用带有cmake的allegro5的程序

时间:2014-01-12 02:18:03

标签: c++ g++ cmake allegro5

编辑:如果你想查看代码,这里是: https://github.com/WalterCapa/PercolationCpp/tree/master

我正在制作一个使用 allegro5 库来生成动画的程序。 因为我想避免在每台使用该程序的计算机上安装库,我试图将标题和.so文件粘贴到我的项目目录中。树就是这样的:

root

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)

问题是这个。我用LinuxMint 13在我的电脑上安装 allegro5。如果我从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})

顺便说一句,在使用MinGW的Windows上尝试时,我使用了cmake -G“MinGW Makefiles”..和mingw32-make。 它发现编译器和cmake工作,但当我尝试第二个时,它给了我同样的错误。在我的桌面上,我正在使用g ++进行编译。

1 个答案:

答案 0 :(得分: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-submodule。如果您包含的项目本身就是一个cmake项目,那么对add_subdirectory的简单调用将使您的项目可以使用目标(通常是库)并创建依赖项。如果项目基于配置,您可以使用ExternalProject - 扩展名。