1. 疑惑
- 编译所依赖的头文件怎么目录怎么指定?
- 链接时必须给出动态文件还是只给定动态文件所在的目录就可以
2. 准备
生成库文件libsayhello.so
sayhello.cpp
#include <iostream>
using namespace std;
void sayhello()
{
cout << "Hello!" << endl;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(SAYHELLO)
add_library(sayhello SHARED sayhello.cpp)
会生成一个libsayhello.so
文件,将该文件任意文件夹中
3. 实验
main.cpp
#include <iostream>
using namespace std;
void sayhello()
{
cout << "Hello!" << endl;
}
sayhello.h
#ifndef __SAYHELLO_H__
#define __SAYHELLO_H__
void sayhello();
#endif
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(SAYHELLO)
# add_library(sayhello SHARED sayhello.cpp)
include_directories(/home/lzf/slam/testso) # 添加文件路径
# link_directories(/home/lzf/slam/testso/lib) # 添加库文件的路径,后面需要将库链接到可执行文件上
link_libraries(/home/lzf/slam/testso/lib/libsayhello.so) # 链接编译所需要的动态文件
add_executable(test main.cpp)
# target_link_libraries(test sayhello) # 将库链接到可执行文件上
# target_link_libraries(test /home/lzf/slam/testso/lib/libsayhello.so) # 或者不添加路径直接将文件链接到可执行文件上
4. 结果
- 用include_directories()来指定头文件的路径
- 必须给出动态文件还是只给定动态文件所在的目录会报错
- 链接库的三种方法
(1) link_directories + target_link_libraries
(2) link_libraries
(3) target_link_libraries