Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1402|回复: 2
打印 上一主题 下一主题

Linux下C++开发工具介绍

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
楼主
发表于 2020-1-1 14:07:25 | 显示全部楼层
1. gcc编译.c源文件 g++编译.cpp源文件
gcc Hello.c -o hello
g++ Hello.cpp -o hello

2.相关参数
-c 可以只编译不链接(针对只包含了.h文件,没有连接到对应的.cpp文件的情况)

/////////////////////////////g++//////////////////
a.常用的编译过程
g++ -c mytool1.cpp //把源文件编译成目标文件,默认目标文件名为mytool1.o
g++  -o test test.o mytool1.o mytool2.o//把多个目标文件链接成可执行文件,指定可执行文件名为test
b.编译多个文件
g++ -o test test.cpp mytool1.cpp  mytool2.cpp //把3个源文件编译链接成可执行文件test

/////////////////////////////gcc//////////////////
a.库相关
.so: 动态链接库文件
.a: 静态链接库文件
b.使用库文件
gcc –o hello –L/home/youname  test.a hello.c  //-L向gcc的库文件搜索路径中添加新的目录  ??
g++ –o hello –lmhello.c    //-l: 指定链接的库文件名  ??
c.其他编译选项
-Wall : 使GCC产生尽可能多的警告信息
-O2: 代码优化(编写出高质量的代码,是编程的关键!!)
注意事项:跟踪和调试程序的时候不使用
-g : 编译的时候加入调试信息

3.make  Makefile 文件
make是一个自动化编译链接工具
Makefile 文件告诉make 做什么 ,怎么做
makefile定义了一系列的规则
makefile文件需要按照某种语法规则来编写
*目标:需要由make工具创建的项目
*依赖关系:要创建的项目依赖哪些文件
*执行的命令:创建项目时需要运行的命令
[目标]   [依赖关系]              [执行的命令]
hello : hello.o mfile.o  g++ –o hello hello.o mfile.o

*宏变量: 使用=定义,使用$()引用宏变量
如:CC = g++
$(CC) –c hello.c

*内部变量 这些变量不需要括号括住

● $@扩展为当前规则的目标文件名;
● $<扩展为当前规则依赖文件列表中的第一个依赖文件;
● $^扩展为整个依赖文件的列表(除掉了所有重复的文件名)。
● $*扩展成当前规则中目标文件和依赖文件共享的文件名,不含扩展名;
● $?扩展为所有的修改日期比当前规则的目标文件的创建日期更晚的依赖文件,该值只有在使用显式规则时才会被使用;

*隐含规则
make 工具中包含一些内置或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。
后缀规则
.c:.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<


4.gdb调试(可仅输入第一个字符) gdb ./文件名
list <显示源代码>
  break 行号<设置断点>
  run<运行程序>
  continue<继续从断点处运行>
  print 变量<调试时查看变量的值>
  del 行号<删除断点>
  step<单步执行,可跟踪到函数内部>
  next<单步执行,不跟踪到函数内部>
  quit<退出>
gcc: GNU编译软件合集,GNU Compiler Collection
主页:http://gcc.gnu.org



回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
沙发
发表于 2020-1-5 15:56:33 | 显示全部楼层
1. gcc编译.c源文件 g++编译.cpp源文件
gcc Hello.c -o hello
g++ Hello.cpp -o hello

2.相关参数
-c 可以只编译不链接(针对只包含了.h文件,没有连接到对应的.cpp文件的情况)

/////////////////////////////g++//////////////////
a.常用的编译过程
g++ -c mytool1.cpp //把源文件编译成目标文件,默认目标文件名为mytool1.o
g++  -o test test.o mytool1.o mytool2.o//把多个目标文件链接成可执行文件,指定可执行文件名为test
b.编译多个文件
g++ -o test test.cpp mytool1.cpp  mytool2.cpp //把3个源文件编译链接成可执行文件test

/////////////////////////////gcc//////////////////
a.库相关
.so: 动态链接库文件
.a: 静态链接库文件
b.使用库文件
gcc –o hello –L/home/youname  test.a hello.c  //-L向gcc的库文件搜索路径中添加新的目录  ??
g++ –o hello –lmhello.c    //-l: 指定链接的库文件名  ??
g++ helloworld.cpp   生成 a.out
g++ helloworld.cpp -o helloworld  生成 helloworld

c.其他编译选项
-Wall : 使GCC产生尽可能多的警告信息
-O2: 代码优化(编写出高质量的代码,是编程的关键!!)
注意事项:跟踪和调试程序的时候不使用
-g : 编译的时候加入调试信息

3.make  Makefile 文件
make是一个自动化编译链接工具
Makefile 文件告诉make 做什么 ,怎么做
makefile定义了一系列的规则
makefile文件需要按照某种语法规则来编写
*目标:需要由make工具创建的项目
*依赖关系:要创建的项目依赖哪些文件
*执行的命令:创建项目时需要运行的命令
[目标]   [依赖关系]              [执行的命令]
hello : hello.o mfile.o  g++ –o hello hello.o mfile.o

*宏变量: 使用=定义,使用$()引用宏变量
如:CC = g++
$(CC) –c hello.c

*内部变量 这些变量不需要括号括住

● $@扩展为当前规则的目标文件名;
● $<扩展为当前规则依赖文件列表中的第一个依赖文件;
● $^扩展为整个依赖文件的列表(除掉了所有重复的文件名)。
● $*扩展成当前规则中目标文件和依赖文件共享的文件名,不含扩展名;
● $?扩展为所有的修改日期比当前规则的目标文件的创建日期更晚的依赖文件,该值只有在使用显式规则时才会被使用;

*隐含规则
make 工具中包含一些内置或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。
后缀规则
.c:.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<


4.gdb调试(可仅输入第一个字符) gdb ./文件名
list <显示源代码>
  break 行号<设置断点>
  del 行号<删除断点>
  info br <查看断点信息>
  run<运行程序>
  continue<继续从断点处运行>
  print 变量<调试时查看变量的值>  
  step<单步执行,可跟踪到函数内部>
  next<单步执行,不跟踪到函数内部>
  quit<退出>
  


  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-4 07:20 , Processed in 0.057060 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表