首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能运行一个在cmake中使用allegro5的程序

我不能运行一个在cmake中使用allegro5的程序
EN

Stack Overflow用户
提问于 2014-01-12 02:18:03
回答 1查看 588关注 0票数 2

编辑:如果您想查看代码,下面是:https://github.com/WalterCapa/PercolationCpp/tree/master

我正在制作一个使用allegro5库来生成动画的程序。因为我希望避免在每台使用该程序的计算机上安装库,所以我尝试将头文件和.so文件粘贴到我的项目dir中。这棵树是这样的:

根部

代码语言:javascript
复制
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)

问题是这个。我在我的pc机上安装了 allegro5和linuxmint 13。如果我从代码::块编译,或者使用-I调用hedaers和-L来告诉.so文件在哪里,即使在另一台计算机中使用cmake也很好,但是当我尝试在另一台计算机上运行它时,即使它是像我的笔记本电脑这样的窗口或带有LinuxMint的虚拟机,它也会生成以下错误:

代码语言:javascript
复制
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:

代码语言:javascript
复制
    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“。和交友32-制造。它发现编译器和cmake都正常工作,但是当我尝试de时,它给了我同样的错误。在我的桌面上,我正在使用g++进行编译。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 11:24:52

我认为您的实际问题是这一行中领先的/

代码语言:javascript
复制
set(allegro5_LIBS /./lib/allegro5/liballegro.so /./lib/allegro5/liballegro_primitives.so)

前导斜杠将告诉cmake寻找绝对路径(如/usr/lib.)而不是以CMAKE_*_DIR作为前缀。尝尝这个

代码语言:javascript
复制
set(allegro5_LIBS ${CMAKE_SOURCE_DIR}/lib/allegro5/liballegro.so ${CMAKE_SOURCE_DIR}/lib/allegro5/liballegro_primitives.so)

不过,我强烈反对您在项目中包括预先构建的库。如果可以的话,集成一个焦油球或一个git子模块。如果您包含的项目本身是一个cmake,那么对add_subdirectory的简单调用将使目标(通常是库)对您的项目可用,并创建一个依赖项。如果项目基于配置,则可以使用ExternalProject-extension。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21070517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档