C++——程序编译与运行


命令行命令

当我们在命令行手动通过指令运行程序时,以g++命令为例,实际上细分为以下步骤
1.预处理,用g++ -E xxx.cpp > program.i表示,进行对宏,注释等的处理,生成.i文件
2.编译, 用g++ -S program.i表示,生成.s文件,把文件转换为汇编文件
3.汇编, g++ -c program.s,把汇编文件变成.o文件
4.链接, g++ -O program.out program1.o program2.o … 把.o文件和库文件链接起来形成一个对象文件
5.运行,使用"./program.out"即可, 需要注意的是如果在程序main函数中输出argc,即命令行参数个数,"./program.out"也算一个参数,即"./program.out s1 s2"这行命令有3个命令行参数

链接库

静态链接库.a/.lib,在链接时会将所有的静态链接库打包成.o文件,与写好的程序链接在一起。不同的程序即使使用相同的静态链接库也必须多次打包,占用空间

动态链接库.so/.dll,在程序运行时才把动态链接库链接上去,不同的程序若使用相同的动态链接库,只需要内存中有一份动态链接库即可

make

make是帮助我们组织Project的工具,我们通过写makefile文件来告知make怎么工作,makefile本质上只是把我们的"g++ ..."命令提前写好,方便调用,最后我们再自己执行二进制文件。简单的语法如下。

image
image

解释如下
1.makefile中的每个target都代表了一个文件。
2.运行make默认执行makefile中第一个target。
3.执行一个target时,会做两件事情:
3.1.查看与这个target同名的文件是否存在,如果不存在,那么就运行这个target下面的命令。
3.2.如果与这个target同名的文件已经存在,那么就检查与这个target名的文件是否需要更新(即target文件的修改时间是否早于依赖文件的修改时间),如果需要更新,那么就运行这个target下面的命令。若均不满足,则不需要执行命令

CMake

makefile在不同平台写法不同,而且语法复杂。于是就有了CMake,CMake可以通过一些语法规则,帮助我们生成makefile,我们再自己调用makefile。我们通过写CMakeLists.txt来告知CMake怎么工作, CMake有跨平台、语法简单的优势,而且非常流行,OpenCV便是用CMake来组织的。简单语法如下。

image


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM