一、建立libfile和binfile两个文件夹。其中libfile为库文件,放编译的库文件。binfile文件放可执行程序和文件。
二、libfile文件夹结构如下:
1、build为编译文件夹,lib为源代码文件夹。各个文件夹下面都有一个CMakeLists.txt文件。
主工程目录下(libfile/)的CMakeLists.txt文件内容如下:
cmake_minimum_required(VERSION 2.8) #版本声明
project(HELLO) #工程名称
add_subdirectory(lib) # 向当前工程中添加存放源文件的目录
2、lib中的CMakeLists.txt文件内容为:
cmake_minimum_required(VERSION 2.8)
add_library(hello SHARED hello.cpp) # 将hello.cpp编译成名为libhello.so的共享库
include_directories(/usr/local/include) # 添加头文件的搜索路径
install(TARGETS hello # 指定共享库libhello.so的安装路径
LIBRARY DESTINATION lib)
install(FILES hello.h DESTINATION include) # 指定hello.h的安装路径
hello.cpp中的内容为:
#include "hello.h"
#include
void sayHello() {std::cout<<"Hello SLAM"<
hello.h中内容为:
#pragma once
void sayHello();
3、开始用cmake来构建编译安装:
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/tmp/local ..
make
make install #若上面是安装在 /usr目录下(即:cmake -DCMAKE_INSTALL_PREFIX=/usr ..)
#则在此处就应该用 sudo make install 来执行安装
此时,hello.cpp就被编译成libhello.so的共享库,位于/libfile/build/lib目录下,且最后被安装在:/tmp/local/bin目录中。
头文件hello.h被安装在: /tmp/local/include 目录中。
三、binfile文件结构如下
1、主工程目录(binfile/)下的CMakeLists.txt文件的内容为:
cmake_minimum_required(VERSION 2.8)
project(HELLO)
add_subdirectory(src bin) # 将源文件所在的目录src添加到工程中,并且将编译的结果
# 输出为指定的目录bin下(包含中间结果)。若省略则将在
# 编译的目录中默认建立src目录来存放输出结果。如在build目录
# 编译将会输出到build/src目录。
2、在binfile/src/ 目录下的CMakeLists.txt文件中的内容如下:
cmake_minimum_required(VERSION 2.8)
add_executable(useHello useHello.cpp) #将useHello.cpp编译成可执行文件useHello
include_directories(/tmp/local/include)
include_directories(/tmp/local/lib)
target_link_libraries(useHello libhello.so) #将可执行文件useHello链接到库文件
# libhello.so上,使useHello可以使用
#库文件中的内容。
3、主函数useHello.cpp文件内容如下,为调用库文件中的函数sayHello(),
#include "hello.h"
int main( int argc, char** argv ) {
sayHello();
}
4、构建编译可执行文件:
mkdir build
cd build
cmake ..
make
sudo ln -s /tmp/local/lib/libhello.so /usr/lib/libhello.so
5、执行build/bin目录中生成的可执行文件,将会调用库文件中函数输出内容。
参考资料:
[1] https://stackoverflow.com/questions/16710047/usr-bin-ld-cannot-find-lnameofthelibrary#
[2] http://blog.51cto.com/eminzhang/1285705
[3] https://www.cnblogs.com/zhming26/p/6164131.html
[4] https://www.cnblogs.com/52php/p/5681718.html