c++ 编程

g++

1.预处理,替换宏、消除注释、找库文件、不生成文件需要重定向输出到一个.i文件里面

命令:g++ -E hello.cpp > hello.i

2.编译 将预处理后的文件转汇编文件.s

命令:g++ -S hello.i

3.汇编文件生成目标文件.o

命令:g++ -c hello.s

4.生成可执行文件

命令:g++ hello.o -o hello

整个过程就是编译源码文件生成可执行文件的过程,但是如果只是简单的项目

命令:g++ main.cpp -o main 就直接生成了可执行文件,里面已经覆盖了这几步

目标文件.o生成可执行文件是链接过程

源文件生成目标文件也就是前三步是编译过程

关于静态库连接和动态库连接,区别就是静态库会加到可执行文件里面,如果静态库过大就不太合适,这个时候就是用动态库,可执行文件用到时候再去链接动态库

静态链接库:

g++ -c mymath.cpp -o mymath.o

ar rcs libmymath.a mymath.o

g++ -c main.cpp -o main.o

g++ main.o -L -lmymath -o main

动态库链接

g++ -c main.cpp -o main.o

g++ mymayh.cpp -shared -o libmymath.so

g++ main.o -L. -lmymath -o main 找动态库会在系统路径下找,可能需要在系统路径加上库的路径

这里-lmymath 会按照libmymath,也就是自动加前缀去找,并且会找到。so或。a去找动态库或者静态库;


编译源码文件

使用CMakeLists.txt文件

最简单的demo

也就是声明cmake 的最低版本cmake_minimum_version

声明项目名字 project(name)

设置编译模式set(CMAKE_BUILD_TYPE "Debug" or "Release")

生成可执行程序add_executable(hello main.cpp)

在终端里面先cmake . 生成Makefile文件然后make进行编译链接操作

所以cmake .的作用就是根据CMakelists文件的信息将项目的信息进行整合,然后通过make对MakeFILE文件的操作进行实施;

makefile:最实用的Makefile教程 真的很简单(搞不明白网上的教程写那么复杂干嘛)_makeifle 最简单-CSDN博客
然后很多中间文件其实会在cmake .的过程中生成如果和源文件混在一起就太乱了

因此会创建一个build文件夹,mkdir build cd ./build

然后cmake .. make 这样中间文件就放在了build文件夹下面了

利用CMakelists.txt生成静态库,还是一样

mkdir build cd build

cmake .. make 就会看到在build目录下面有一个libhello.a------lib是自动加的 .a表示静态库 .so表示动态库

利用CMakelists.txt生成动态库,还是一样 ,不过加了shared就跟之前的g++命令一样

g++ mymayh.cpp -shared -o libmymath.so

最后利用动态库生成可执行文件

主要加了两步,8行通过add_executable(obj src)生成可执行文件,

之后通过target_link_libraries(obj lib)将库连接到可执行文件,这也和之前说的

静态库和动态库链接到可执行文件的操作

静态库是在编译的时候就直接加到了可执行文件里面,

动态库是在用到的时候可执行文件再去找,因此动态库更新,也不会导致项目需要重新编译;

CMakeLists.txt如何编写

大小写不敏感

  1. cmake_minimum_required( version 2.8)
  2. project(name)
  3. set( cmake_cxx_compiler "g++") 编译器
  4. set(cmake_cxx_flags "std=c++11 -march=native -o3) 标准支持 native执行目标程序的cpu架构来进行程序优化,只有在编译时指定release才有效
  5. set(cmake_build_type "debug" or "release") 二选一
  6. set(executable_output_path ${}/bin)
  7. set(library_output_path ${}/bin)
  8. set(cmake_install_prefix <install_path>)
  9. cmake -dcmake_install_prefix=/usr 执行路径,多版本时
相关推荐
AA陈超5 分钟前
虚幻引擎5 GAS开发俯视角RPG游戏 P04-12 可缩放浮点数的曲线表
c++·游戏·ue5·游戏引擎·虚幻
旭意14 分钟前
C++微基础备战蓝桥杯之数组篇10.1
开发语言·c++·蓝桥杯
MediaTea44 分钟前
Python:匿名函数 lambda
开发语言·python
R-G-B1 小时前
【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件
开发语言·c#·c# 多个 .cs文件项目
青草地溪水旁1 小时前
VSCode C/C++ 构建任务配置文件 `tasks.json` 全字段深度解析
c语言·c++·vscode
数据知道1 小时前
Go基础:正则表达式 regexp 库详解
开发语言·mysql·golang·正则表达式·go语言
小蒜学长1 小时前
jsp基于JavaWeb的原色蛋糕商城的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
zhangfeng11331 小时前
亲测可用,R语言 ggplot2 箱线图线条控制参数详解,箱线图离散数值控制
开发语言·python·r语言·生物信息
yzx9910131 小时前
国庆科技感祝福:Python 粒子国旗动画
开发语言·人工智能·python
迪丽热爱2 小时前
【练】C程序设计-01程序设计和C语言
c语言·开发语言