编辑:如果你想查看代码,这里是: 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 ++进行编译。
答案 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 - 扩展名。