编辑:如果您想查看代码,下面是:https://github.com/WalterCapa/PercolationCpp/tree/master
我正在制作一个使用allegro5库来生成动画的程序。因为我希望避免在每台使用该程序的计算机上安装库,所以我尝试将头文件和.so文件粘贴到我的项目dir中。这棵树是这样的:
根部
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的虚拟机,它也会生成以下错误:
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“。和交友32-制造。它发现编译器和cmake都正常工作,但是当我尝试de时,它给了我同样的错误。在我的桌面上,我正在使用g++进行编译。
发布于 2014-01-12 11:24:52
我认为您的实际问题是这一行中领先的/:
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)不过,我强烈反对您在项目中包括预先构建的库。如果可以的话,集成一个焦油球或一个git子模块。如果您包含的项目本身是一个cmake,那么对add_subdirectory的简单调用将使目标(通常是库)对您的项目可用,并创建一个依赖项。如果项目基于配置,则可以使用ExternalProject-extension。
https://stackoverflow.com/questions/21070517
复制相似问题