- 刚开始学习C,编译、连接程序只用一句两句命令就可以完成
gcc -o hello hello.c
- 学习深入后学会使用自带的库用到
-l
gcc -o main -lgdbm main.c
- 本来有自然是好的,但总会有系统没有的功能。这里就只能自己写库文件。有了库文件和头文件引用又是个麻烦的事。
/* 静态库 */
gcc -o func.o -c func.c
ar rsc libfunc.a fun.o
gcc main.c -o main -static -Lpathtolib -lfunc
/* 动态库 */
gcc -fPIC --shared -o libfunc.so func.c
gcc -c main.c -o main -Lpathtolib -lfunc
- 引入系统变量
LD_LIBRARY_PATH,LIBRARY_PATH,C_INCLUDE_PATH
vi ~/.bashrc
export LD_LIBRARY_PATH='运行时使用库搜索目录'
export LIBRARY_PATH='编译时使用库搜索目录'
export C_INCLUDE_PATH='使用自定义头文件搜索目录'
- 每次都要输入一长串的gcc命令,还要把头文件、库文件移到相应目录,实在有点麻烦。makefile出现。
/* makefile */
all:main
main:main.c libLIB.so
gcc -o main -c main.c -lLIB -Lpath
/* 之后每次都只用make就可以了,调试方便多了*/
- 更换系统需要在不同系统中编译同一个源文件,不同系统中用到不同的库文件,不可能第个系统都改makefile,太麻烦了。cmake出现了。
/* system A */
gcc -o main -c main.c -lLIB1 -lLIB2
/* system B */
gcc -o main -c main.c -lLIB1 -lLIB2 -lLIB3
/* 使用cmake可以让程序管理更明白,只用cmake make make install 固定步骤就可以了。
cmake带来了什么?
- 基于项目管理库、头文件,不必把很多测试项目加入系统库和头文件中。
- 增加移植性,不同系统的区别可以交cmake处理。对于编译,连接所有程序可以做到统一步骤。
- 减少引入相同库、头文件的重复操作
很多东西都有主要用途,于我而言1,2才是cmake最大意义。减少了很多因为各种系统,库文件而带来的繁锁。
这里没有说怎么使用cmake这个工具,只是说了下,怎么一步一步用到了它。我的另一篇文章有介绍怎么使用cmake构建一个学习使用的样例。样例中有使用到公用库,不同系统等使用,还有一些使用中的问题。文章地址