任务:
编写一个程序使用我们上一届构建的共享库
1、准备工作
在/backup/cmake目录建立t4目录
mkdir t4
在t4目录中建立src目录,并编写源文件main.c
cd t4
mkdir src && cd src
touch main.c
main.c的内容如下:
#include <hello.h>
int main()
{
HelloFunc();
return 0;
}
编写工程主文件CMakeLists.txt如下
PROJECT(NEWHELLO)
# 头文件搜索路径
INCLUDE_DIRECTORIES(/usr/include/hello)
ADD_SUBDIRECTORY(src)
编写src/CMakeLists.txt如下
# 生成target二进制可执行文件
ADD_EXECUTABLE(main mian.c)
# 为target链接共享库
# 可以link动态库
TARGET_LINK_LIBRARIES(main hello) # hello 也可以写成libhello.so
# 也可以Link静态库
TARGET_LINK_LIBRARIES(main libhello.a)
2、构建
新建buil目录并进入进行构建
cmake ..
make
这样我们就得到了一个连接到libhello的可执行程序main,位于build/src,目录下,运行main的结果是输出:
Hello World
检查下main的链接情况:
如果链接动态库:
可以清楚的看到main确实链接了共享库libhello,而且是链接的动态库libhello.so.1
如果链接的是静态库:
main链接到libhello.a(这里我也不大懂)
问:这里在工程主文件CMakeLists.txt中指定了头文件的搜索路径,但是没有在src/CMakeLists.txt指定共享库的路径,而是直接进行链接,这样说不过去呀?
前面我们将头文件和共享库安装到系统目录/usr/lib和/usr/include/hello中了。会不会/usr/lib默认是库的存放位置。
还真是哦,不信你看,所以上一步安装的位置要对哦: /lib、/usr/lib、/usr/local/lib区别_XX風的博客-CSDN博客_/usr/lib
问:如果我没有把共享库安装/usr/lib,比如说我安装到了/temp/lib那我需要指定共享库路径吗?
是的哦,在工程主文件CMakeLists.txt中添加:
LINK_DIRECTORIES(/temp/lib)
参考: