C/C++教程

CMakeLists.txt学习

本文主要是介绍CMakeLists.txt学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

------------------ 2-27

首先 cmake . (. 表示CMakeLists.txt所在的目录,cmake就是通过CMakeLists.txt来生成makefile的)  --> make(根据makefile里的规则开始编译,所以要和makefile在同目录) --> 生成CMakeLists.txt里定义的项目名称的可执行文件,最后执行一下就好了。 注意:cmake会在当前目录生成makefile等其它文件和源文件混在一起就很乱了,一般是建一个build文件夹在里面执行cmake ..

 

---------------- 2-28

编译过程:源文件.c/.h --> 预编译(处理#开头的预编译指令,如#inclide、#define等) --> 编译(语法、语义分析并优化) --> 汇编(将上一步整理的代码转为机器码) --> 链接(将编译出来的目标文件和代码里用到的库文件打包成最终的可执行文件)

 

静态库和动态库区别:

  静态库在链接这一步的时候把自己直接加载到程序中;程序(可执行文件)运行时就不再需要该静态库,意味着如果库文件更新了,需要重新编译可执行文件;最终生成的可执行文件大

  动态库在链接这一步的时候只是给了个接口;程序(可执行文件)运行时通过接口加载,所以程序(可执行文件)运行时还需要动态库存在,意味着库文件更新了,此可执行文件也就更新了;最终生成的可执行文件小

 

生成静态库和动态库:

  无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件

  Linux生成静态库:

    gcc -c hello.c //  生成目标文件hello.o

    ar crv libhello.a hello.o // 将目标文件hello.o 打包成静态库文件libhello.a

  Linux使用静态库(假如静态库文件是libhello.a ,main.c要使用它):

    gcc main.c -L . -lhello //  -L 后面是静态库文件所在的目录,h-l加上库名,这个库名是去掉lib和后面的.a

  Linux生成动态库:

    gcc -fPIC -shared -o libhello.so hello.c // -fPIC 是为了能够在多个应用程序间共享,-shared指定生成动态库

  Linux使用动态库:

    gcc mian.c -o mian -L ./ -lhello // -L后面是库文件的路径,h-l加上库名,这个库名是去掉lib和后面的.so。注意:如上所说此可执行文件运行时,动态库还是要存在的,也就是说

linux动态、静态库&win动态、静态库:so、a & dll、lib

 

gcc ts.c -o ts:生成ts可执行文件

这篇关于CMakeLists.txt学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!